LISTSERV mailing list manager LISTSERV 16.5

Help for HPS-SVN Archives


HPS-SVN Archives

HPS-SVN Archives


HPS-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

HPS-SVN Home

HPS-SVN Home

HPS-SVN  November 2014

HPS-SVN November 2014

Subject:

r1527 - in /java/trunk: ecal-recon/src/main/java/org/hps/recon/ecal/ recon/src/main/java/org/hps/recon/particle/ steering-files/src/main/resources/org/hps/steering/recon/

From:

[log in to unmask]

Reply-To:

Notification of commits to the hps svn repository <[log in to unmask]>

Date:

Fri, 14 Nov 2014 21:06:07 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (1396 lines)

Author: [log in to unmask]
Date: Fri Nov 14 13:06:01 2014
New Revision: 1527

Log:
merge ReconParticleDriverIC changes into ReconParticleDriver

Removed:
    java/trunk/recon/src/main/java/org/hps/recon/particle/HpsReconParticleDriverIC.java
    java/trunk/recon/src/main/java/org/hps/recon/particle/ReconParticleDriverIC.java
Modified:
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/HPSEcalClusterIC.java
    java/trunk/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java
    java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineNoPileupRecon.lcsim
    java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineRecon.lcsim
    java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineTruthRecon.lcsim

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/HPSEcalClusterIC.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/HPSEcalClusterIC.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/HPSEcalClusterIC.java	Fri Nov 14 13:06:01 2014
@@ -21,14 +21,7 @@
     private ArrayList<CalorimeterHit> sharedHitList = new ArrayList<CalorimeterHit>(); 
     private double[] rawPosition = new double[3];
 
-    
-    
-    static final double eCriticalW = 800.0*ECalUtils.MeV/(74+1);
-    static final double radLenW = 8.8; //mm
-    double[] electronPosAtDepth = new double[3];
-    private boolean needsElectronPosCalculation = true;
-    double[] photonPosAtDepth = new double[3];
-    private boolean needsPhotonPosCalculation = true;
+    private int particleID = 0;
     
  // Variables for electron energy corrections
     static final double ELECTRON_ENERGY_A = -0.0027;
@@ -132,21 +125,19 @@
      * @param rawEnergy Raw Energy of the cluster (sum of hits with shared hit distribution)
      * @return Corrected Energy
      */    
-    public double enCorrection(int pdg, double rawEnergy){
-  	   if (pdg == 11) { // Particle is electron  		   
-  		   return energyCorrection(rawEnergy, ELECTRON_ENERGY_A, ELECTRON_ENERGY_B, ELECTRON_ENERGY_C);   
-  	   }
-  	   else if (pdg == -11) { //Particle is positron
-		   return energyCorrection(rawEnergy, POSITRON_ENERGY_A, POSITRON_ENERGY_B, POSITRON_ENERGY_C);   
-  	   }
-  	   else if (pdg == 22) { //Particle is photon
-		   return energyCorrection(rawEnergy, PHOTON_ENERGY_A, PHOTON_ENERGY_B, PHOTON_ENERGY_C);   
-  	   }
-  	   else { //Unknown 
-  		   double corrEnergy = rawEnergy;
-  		   return corrEnergy;}
-  	   
-     }   
+    private double enCorrection(int pdg, double rawEnergy) {
+        switch (pdg) {
+            case 11: // Particle is electron  		   
+                return energyCorrection(rawEnergy, ELECTRON_ENERGY_A, ELECTRON_ENERGY_B, ELECTRON_ENERGY_C);
+            case -11: //Particle is positron
+                return energyCorrection(rawEnergy, POSITRON_ENERGY_A, POSITRON_ENERGY_B, POSITRON_ENERGY_C);
+            case 22: //Particle is photon
+                return energyCorrection(rawEnergy, PHOTON_ENERGY_A, PHOTON_ENERGY_B, PHOTON_ENERGY_C);
+            default: //Unknown 
+                return rawEnergy;
+        }
+
+    }
     
     /**
      * Calculates the energy correction to a cluster given the variables from the fit as per
@@ -155,7 +146,7 @@
      * @param A,B,C from fitting in note
      * @return Corrected Energy
      */   
-    public double energyCorrection(double rawEnergy, double varA, double varB, double varC){
+    private double energyCorrection(double rawEnergy, double varA, double varB, double varC){
     	double corrEnergy = rawEnergy / (varA * rawEnergy + varB / (Math.sqrt(rawEnergy)) + varC);
     	return corrEnergy;
     }
@@ -170,24 +161,24 @@
      * @param rawEnergy Raw energy of the cluster (sum of hits with shared hit distribution)
      * @return Corrected x position
      */
-    public double posCorrection(int pdg, double xPos, double rawEnergy){
-    	double xCl = xPos/10.0;//convert to mm
-    	if (pdg == 11) { //Particle is electron    	
-    		double xCorr = positionCorrection(xCl, rawEnergy, ELECTRON_POS_A, ELECTRON_POS_B, ELECTRON_POS_C, ELECTRON_POS_D, ELECTRON_POS_E);
-    		return xCorr*10.0;
-    	}
-    	else if (pdg == -11) {// Particle is positron   	
-    		double xCorr = positionCorrection(xCl, rawEnergy, POSITRON_POS_A, POSITRON_POS_B, POSITRON_POS_C, POSITRON_POS_D, POSITRON_POS_E);
-    		return xCorr*10.0;
-    	}
-    	else if (pdg == 22) {// Particle is photon  	
-    		double xCorr = positionCorrection(xCl, rawEnergy, PHOTON_POS_A, PHOTON_POS_B, PHOTON_POS_C, PHOTON_POS_D, PHOTON_POS_E);
-    		return xCorr*10.0;
-    	}
-    	else { //Unknown 
-    		double xCorr = xCl;
-    		return xCorr*10.0;}
-    	}
+    private double posCorrection(int pdg, double xPos, double rawEnergy) {
+        double xCl = xPos / 10.0;//convert to mm
+        double xCorr;
+        switch (pdg) {
+            case 11: //Particle is electron    	
+                xCorr = positionCorrection(xCl, rawEnergy, ELECTRON_POS_A, ELECTRON_POS_B, ELECTRON_POS_C, ELECTRON_POS_D, ELECTRON_POS_E);
+                return xCorr * 10.0;
+            case -11:// Particle is positron   	
+                xCorr = positionCorrection(xCl, rawEnergy, POSITRON_POS_A, POSITRON_POS_B, POSITRON_POS_C, POSITRON_POS_D, POSITRON_POS_E);
+                return xCorr * 10.0;
+            case 22: // Particle is photon  	
+                xCorr = positionCorrection(xCl, rawEnergy, PHOTON_POS_A, PHOTON_POS_B, PHOTON_POS_C, PHOTON_POS_D, PHOTON_POS_E);
+                return xCorr * 10.0;
+            default: //Unknown 
+                xCorr = xCl;
+                return xCorr * 10.0;
+        }
+    }
     
     
    /**
@@ -203,382 +194,29 @@
     * @param varE
     * @return
     */    
-    public double positionCorrection(double xCl, double rawEnergy, double varA, double varB, double varC, double varD, double varE){
+    private double positionCorrection(double xCl, double rawEnergy, double varA, double varB, double varC, double varD, double varE){
     	double xCorr = xCl-(varA/Math.sqrt(rawEnergy) + varB )*xCl-
 				(varC*rawEnergy + varD/Math.sqrt(rawEnergy) + varE);
     	return xCorr;
     }
     
-    
- /*   @Override
-    public double[] getPosition() {
-        //Electron by default!?
-        return this.getPositionAtShowerMax(true);
-    }
-        
-    public double[] getPositionAtShowerMax(boolean isElectron) {
-        if( isElectron) {
-            if(needsElectronPosCalculation) {
-                this.calcPositionAtShowerMax(true);
-            }
-            return this.electronPosAtDepth;
-        }
-        else {
-            if(needsPhotonPosCalculation) {
-                this.calcPositionAtShowerMax(false);
-            }
-            return this.photonPosAtDepth;
-        }  
-    }
-        
-    public void calcPositionAtShowerMax(boolean isElectron) {
-        double E = this.getEnergy();
-        double y = E/eCriticalW;
-        double Cj = isElectron ? -0.5 : 0.5;
-        double tmax = Math.log(y) + Cj; //Maximum of dE/dt profile in units of rad. len. 
-//        double dmax = tmax*radLenW; //mm
-        double dmax = 0.0; //Changed this to readout crystal centroid at face
-        if(isElectron) {
-            electronPosAtDepth =  calculatePositionAtDepth(dmax);
-        } else {
-            photonPosAtDepth =  calculatePositionAtDepth(dmax);
-        }
-            
-    }
-    
-    
-    
-    public double[] calculatePositionAtDepth(double dmax) 
-    {
-        return this.calculatePositionAtDepth(this.getCalorimeterHits(), dmax);
-    }    
-    
-    public double[] calculatePositionAtDepth(List<CalorimeterHit> hits, double dmax)
-    {
-        //copy from package org.lcsim.recon.cluster.util.TensorClusterPropertyCalculator;
-
-        double positionErrorLocal[] = new double[6];
-        double directionErrorLocal[] = new double[6];
-        double shapeParametersLocal[] = new double[6];
-        double positionLocal[] = new double[3];
-        double ithetaLocal;
-        double iphiLocal;
-        
-        
-        double[] mm_NE = new double[3];
-        double[] mm_CE = new double[3];
-        double[][] mm_PA = new double[3][3];
-        for(int i=0;i<3;++i)
-        {
-            mm_NE[i] = 0.;
-            mm_CE[i] = 0.;
-            for(int j=0;j<3;++j)
-            {mm_PA[i][j]= 0.;}
-        }
-        double Etot = 0.0;
-        double Exx = 0.0;
-        double Eyy = 0.0;
-        double Ezz = 0.0;
-        double Exy = 0.0;
-        double Eyz = 0.0;
-        double Exz = 0.0;
-        double CEx = 0.0;
-        double CEy = 0.0;
-        double CEz = 0.0;
-        double CEr = 0.0;
-        double E1 = 0.0;
-        double E2 = 0.0;
-        double E3 = 0.0;
-        double NE1 = 0.0;
-        double NE2 = 0.0;
-        double NE3 = 0.0;
-        double Tr = 0.0;
-        double M = 0.0;
-        double Det = 0.0;
-        int nhits = hits.size();
-        for(int i=0;i<hits.size();i++)
-        {
-            CalorimeterHit hit = hits.get(i);
-            //	CalorimeterIDDecoder decoder = hit.getDecoder();
-            //	decoder.setID(hit.getCellID());
-            //	double[] pos = new double[3];
-            //	pos[0] = decoder.getX();
-            //	pos[1] = decoder.getY();
-            //	pos[2] = decoder.getZ();
-            //double[] pos = hit.getPosition();
-            //Find position at shower max
-            IGeometryInfo geom = hit.getDetectorElement().getGeometry();
-            double[] pos = geom.transformLocalToGlobal(VecOp.add(geom.transformGlobalToLocal(geom.getPosition()),(Hep3Vector)new BasicHep3Vector(0,0,dmax-1*((Trd)geom.getLogicalVolume().getSolid()).getZHalfLength()))).v();
-
-
-            
-            
-//            System.out.println("global pos " + global_pos.toString());
-//            System.out.println("local pos " + local_pos.toString());
-//            System.out.println("local pos tmax " + local_pos_tmax.toString());
-//            System.out.println("global pos tmax " + global_pos_tmax.toString());
-//            
-            //pos = global_pos_tmax.v();
-            
-            double E = hit.getCorrectedEnergy();
-            Etot += E;
-            CEx += E*pos[0];
-            CEy += E*pos[1];
-            CEz += E*pos[2];
-            Exx += E*(pos[1]*pos[1] + pos[2]*pos[2]);
-            Eyy += E*(pos[0]*pos[0] + pos[2]*pos[2]);
-            Ezz += E*(pos[1]*pos[1] + pos[0]*pos[0]);
-            Exy -= E*pos[0]*pos[1];
-            Eyz -= E*pos[1]*pos[2];
-            Exz -= E*pos[0]*pos[2];
-        }
-        CEx = CEx/Etot;
-        CEy = CEy/Etot;
-        CEz = CEz/Etot;
-        double CErSq = CEx*CEx + CEy*CEy + CEz*CEz;
-        CEr = Math.sqrt(CErSq);
-        // now go to center of energy coords.
-        if (nhits > 3 )
-        {
-            Exx = Exx - Etot*(CErSq - CEx*CEx);
-            Eyy = Eyy - Etot*(CErSq - CEy*CEy);
-            Ezz = Ezz - Etot*(CErSq - CEz*CEz);
-            Exy = Exy + Etot*CEx*CEy;
-            Eyz = Eyz + Etot*CEy*CEz;
-            Exz = Exz + Etot*CEz*CEx;
-
-            //
-            Tr = Exx + Eyy + Ezz;
-            double Dxx = Eyy*Ezz - Eyz*Eyz;
-            double Dyy = Ezz*Exx - Exz*Exz;
-            double Dzz = Exx*Eyy - Exy*Exy;
-            M = Dxx + Dyy + Dzz;
-            double Dxy = Exy*Ezz - Exz*Eyz;
-            double Dxz = Exy*Eyz - Exz*Eyy;
-            Det = Exx*Dxx - Exy*Dxy + Exz*Dxz;
-            double xt = Tr*Tr - 3*M;
-            double sqrtxt = Math.sqrt(xt);
-            // eqn to solve for eigenvalues is x**3 - x**2*Tr + x*M - Det = 0
-            // crosses y axis at -Det and inflection points are
-
-            double mE1 = 0.;
-            double mE2 = 0.;
-            double mE3 = 0.;
-            double a = (3*M - Tr*Tr)/3.;
-            double b = (-2*Tr*Tr*Tr + 9*Tr*M -27*Det)/27.;
-            double test = b*b/4. + a*a*a/27.;
-            if(test >= 0.01)
-            {
-                //System.out.println("AbstractCluster: Only 1 real root!!!");
-                //System.out.println("  nhits = " + nhits + "\n");
-                //System.out.println(" a,b,test = " + a + " " + b + " " + test + "\n");
-            }
-            else
-            {
-                double temp;
-                if(test >= 0.)temp = 1.;
-                else temp = Math.sqrt(b*b*27./(-a*a*a*4.));
-                if(b > 0.)temp = -temp;
-                double phi = Math.acos(temp);
-                double temp1 = 2.*Math.sqrt(-a/3.);
-                mE1 = Tr/3. + 2.*Math.sqrt(-a/3.)*Math.cos(phi/3.);
-                mE2 = Tr/3. + 2.*Math.sqrt(-a/3.)*Math.cos(phi/3. + 2.*Math.PI/3.);
-                mE3 = Tr/3. + 2.*Math.sqrt(-a/3.)*Math.cos(phi/3. + 4.*Math.PI/3.);
-            }
-            if(mE1 < mE2)
-            {
-                if(mE1 < mE3)
-                {
-                    E1 = mE1;
-                    if(mE2 < mE3)
-                    {
-                        E2 = mE2;
-                        E3 = mE3;
-                    }
-                    else
-                    {
-                        E2 = mE3;
-                        E3 = mE2;
-                    }
-                }
-                else
-                {
-                    E1 = mE3;
-                    E2 = mE1;
-                    E3 = mE2;
-                }
-            }
-            else
-            {
-                if(mE2 < mE3)
-                {
-                    E1 = mE2;
-                    if(mE1 < mE3)
-                    {
-                        E2 = mE1;
-                        E3 = mE3;
-                    }
-                    else
-                    {
-                        E2 = mE3;
-                        E3 = mE1;
-                    }
-                }
-                else
-                {
-                    E1 = mE3;
-                    E2 = mE2;
-                    E3 = mE1;
-                }
-            }
-
-            NE1 = E1/Etot;
-            NE2 = E2/Etot;
-            NE3 = E3/Etot;
-            double[] EV = new double[3];
-            EV[0] = E1;
-            EV[1] = E2;
-            EV[2] = E3;
-            // Now calculate principal axes
-	    // For eigenvalue EV, the axis is (nx, ny, nz) where:
-	    //    (Exx - EV)nx + (Exy)ny + (Exz)nz = 0
-	    //    (Eyx)nx + (Eyy - EV)ny + (Eyz)nz = 0
-	    //    (Ezx)nx + (Ezy)ny + (Ezz - EV)nz = 0
-	    // Setting nx = 1, we have:
-	    //    (Exx - EV) + (Exy)ny + (Exz)nz = 0
-	    //    (Eyx) + (Eyy - EV)ny + (Eyz)nz = 0
-	    //    (Ezx) + (Ezy)ny + (Ezz - EV)nz = 0
-	    // and so
-	    //    (Exy)ny = EV - Exx - (Exz)nz  =>  ny = (EV - Exx - Exz*nz)/Exy
-	    // What if Exy = 0? Then provided Eyz is non-zero we can write:
-	    //    (Ezx) + (Ezy)ny + (Ezz - EV)nz = 0
-	    //    ny = (Exz - (Ezz-EV)*nz)/Eyz
-	    // What if Exy = 0 and Eyz = 0 but (Eyy - EV) is non-zero?
-	    //    (Eyy - EV)ny + (Eyz)nz = 0
-	    //    ny = -(Eyz*nz)/(Eyy-EV)
-
-	    // In the pathological case where Exz = Eyz = Ezz = 0:
-	    //    (Exx - EV)nx + (Exy)ny = 0  =>  ny/nx = -(Exx-EV)/Exy
-	    //    (Eyx)nx + (Eyy - EV)ny = 0  =>  ny/nx = -Eyx/(Eyy-EV)
-	    //    (EV)nz = 0
-	    // so
-	    //     -ny/nx = (EV-Exx)/Exy = Eyx/(EV-Eyy)
-	    // But watch out for order! Recalculate eigenvalues for this pathological case.
-	    //     (EV-Exx)(EV-Eyy) = Eyx*Exy
-	    //     EV^2 - EV(Exx+Eyy) + Exx*Eyy - Eyx*Exy = 0
-	    // 
-	    // In another pathological case, Exz = Exy = 0:
-	    //    (Exx - EV)nx = 0
-	    //    (Eyy - EV)ny + (Eyz)nz = 0 => ny/nz = -(Eyz)/(Eyy-EV)
-	    //    (Ezy)ny + (Ezz - EV)nz = 0 => ny/nz = -(Ezz-EV)/(Ezy)
-	    // so we cannot set nx = 1. Instead, write:
-	    //    -ny/nz = (Eyz)/(Eyy-EV) = (Ezz-EV)/(Ezy)
-	    // Then
-	    //    (Eyz)(Ezy) = (Eyy-EV)(Ezz-EV)
-	    //    (Eyz)^2 = (Eyy)(Ezz) - (Eyy)(EV) - (Ezz)(EV) + (EV)^2
-	    //    EV^2 - EV(Eyy+Ezz) + Eyy*Ezz - Eyz*Eyz = 0
-
-	    // Handle pathological case
-	    if (Exz == 0.0 && Eyz == 0.0) {
-		// Recompute eigenvectors.
-		EV[0] = 0.5*(Exx+Eyy) + 0.5*Math.sqrt((Exx+Eyy)*(Exx+Eyy) + 4.0*Exy*Exy);
-		EV[1] = 0.5*(Exx+Eyy) - 0.5*Math.sqrt((Exx+Eyy)*(Exx+Eyy) + 4.0*Exy*Exy);
-		EV[2] = 0.0;
-		for( int i = 0 ; i < 2 ; i++ ) {
-		    double nx_over_ny = Exy / (Exx-EV[i]);
-		    double nx_unnormalized = nx_over_ny;
-		    double ny_unnormalized = 1.0;
-		    double norm = Math.sqrt(nx_unnormalized*nx_unnormalized + ny_unnormalized*ny_unnormalized);
-		    mm_PA[i][0] = ny_unnormalized/norm;
-		    mm_PA[i][1] = nx_unnormalized/norm;
-		    mm_PA[i][2] = 0.0;
-		}
-		// ... and now set third eigenvector to the z direction:
-		mm_PA[2][0] = 0.0;
-		mm_PA[2][1] = 0.0;
-		mm_PA[2][2] = 1.0;
-	    } else if (Exz == 0.0 && Exy == 0.0) {
-		// Another pathological case
-		EV[0] = 0.5*(Eyy+Ezz) + 0.5*Math.sqrt((Eyy+Ezz)*(Eyy+Ezz) + 4.0*Eyz*Eyz);
-		EV[1] = 0.5*(Eyy+Ezz) - 0.5*Math.sqrt((Eyy+Ezz)*(Eyy+Ezz) + 4.0*Eyz*Eyz);
-		EV[2] = 0.0;
-		for( int i = 0 ; i < 2 ; i++ ) {
-		    double ny_over_nz = Eyz / (Eyy-EV[i]);
-		    double ny_unnormalized = ny_over_nz;
-		    double nz_unnormalized = 1.0;
-		    double norm = Math.sqrt(ny_unnormalized*ny_unnormalized + nz_unnormalized*nz_unnormalized);
-		    mm_PA[i][0] = nz_unnormalized/norm;
-		    mm_PA[i][1] = ny_unnormalized/norm;
-		    mm_PA[i][2] = 0.0;
-		}
-		mm_PA[2][0] = 0.0;
-		mm_PA[2][1] = 0.0;
-		mm_PA[2][2] = 1.0;
-	    } else {
-		for( int i = 0 ; i < 3 ; i++ )
-		    {
-			double[] C = new double[3];
-			C[0] = 1.0;
-			C[2] = (Exy*Exy + (Eyy - EV[i])*(EV[i] - Exx))/
-			    ((Eyy - EV[i])*Exz - Eyz*Exy);
-			C[1] = (EV[i] - Exx - Exz*C[2])/Exy;
-			if (Exy == 0.0) {
-			    // Recompute
-			    if (Eyz != 0.0) {
-				// ny = (Exz - (Ezz-EV)*nz)/Eyz
-				C[1] = (Exz - (Ezz-EV[i])*C[2])/Eyz;
-			    } else {
-				// ny = -(Eyz*nz)/(Eyy-EV)
-				C[1] = -(Eyz*C[2])/(Eyy-EV[i]);
-			    }
-			}
-			double norm = Math.sqrt(C[0]*C[0] + C[1]*C[1] + C[2]*C[2]);
-			mm_PA[i][0] = C[0]/norm;
-			mm_PA[i][1] = C[1]/norm;
-			mm_PA[i][2] = C[2]/norm;
-		    }
-	    }
-        }
-        mm_NE[0] = NE1;
-        mm_NE[1] = NE2;
-        mm_NE[2] = NE3;
-        mm_CE[0] = CEx;
-        mm_CE[1] = CEy;
-        mm_CE[2] = CEz;
-        for(int i=0;i<6;i++)
-        {
-            positionErrorLocal[i] = 0.;
-            directionErrorLocal[i] = 0.;
-            shapeParametersLocal[i] = 0.;
-        }
-        for(int i=0;i<3;i++)
-        {
-            positionLocal[i] = mm_CE[i];
-            shapeParametersLocal[i] = mm_NE[i];
-        }
-        if(nhits > 3)
-        {
-            double dr = Math.sqrt(  (position[0]+mm_PA[0][0])*(position[0]+mm_PA[0][0]) +
-                    (position[1]+mm_PA[0][1])*(position[1]+mm_PA[0][1]) +
-                    (position[2]+mm_PA[0][2])*(position[2]+mm_PA[0][2]) ) -
-                    Math.sqrt(	(position[0])*(position[0]) +
-                    (position[1])*(position[1]) +
-                    (position[2])*(position[2]) ) ;
-            double sign = 1.;
-            if(dr < 0.)sign = -1.;
-            itheta = Math.acos(sign*mm_PA[0][2]);
-            iphi = Math.atan2(sign*mm_PA[0][1],sign*mm_PA[0][0]);
-        }
-        else
-        {
-            itheta = 999.;
-            iphi = 999.;
-        }
-    
-        return positionLocal;
-    }
-    
-  */  
-    
-    
+    private void recalculateForParticleID(int pid) {
+        double rawE = getRawEnergy();
+        double corrE = enCorrection(pid, rawE);
+        setEnergy(corrE);
+        double rawP[] = getPosition();
+        double corrP = posCorrection(pid, rawP[0], rawE);
+        double[] corrPosition = new double[3];
+        corrPosition[0] = corrP;
+        corrPosition[1] = rawP[1];
+        corrPosition[2] = rawP[2];
+        setCorrPosition(corrPosition);
+    }
+    
+    public void setParticleID(int pid) {
+        if (particleID!=pid){
+            particleID = pid;
+            recalculateForParticleID(pid);
+        }
+    }
 }

Modified: java/trunk/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java
 =============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java	(original)
+++ java/trunk/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java	Fri Nov 14 13:06:01 2014
@@ -4,10 +4,11 @@
 import hep.physics.vec.BasicHepLorentzVector;
 import hep.physics.vec.Hep3Vector;
 import hep.physics.vec.HepLorentzVector;
-
 import java.util.ArrayList;
 import java.util.List;
-
+import org.hps.recon.ecal.HPSEcalClusterIC;
+import org.hps.recon.tracking.CoordinateTransformations;
+import org.hps.recon.tracking.TrackUtils;
 import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.ReconstructedParticle;
@@ -17,178 +18,199 @@
 import org.lcsim.geometry.Detector;
 import org.lcsim.util.Driver;
 
-import org.hps.recon.tracking.CoordinateTransformations;
-import org.hps.recon.tracking.TrackUtils;
-
 /**
- * Driver framework for generating reconstructed particles and matching
- * clusters and tracks.
+ * Driver framework for generating reconstructed particles and matching clusters
+ * and tracks.
  *
  * @author Mathew Graham <[log in to unmask]>
  * @author Omar Moreno <[log in to unmask]>
  * @version $Id$
  */
 public abstract class ReconParticleDriver extends Driver {
-    /**
-     * Sets the name of the LCIO collection for beam spot constrained
-     * V0 candidate particles.
+
+    /**
+     * Sets the name of the LCIO collection for beam spot constrained V0
+     * candidate particles.
+     *
      * @param beamConV0CandidatesColName - The LCIO collection name.
      */
     public void setBeamConV0CandidatesColName(String beamConV0CandidatesColName) {
         this.beamConV0CandidatesColName = beamConV0CandidatesColName;
     }
-    
-    /**
-     * Sets the name of the LCIO collection for beam spot constrained
-     * V0 candidate vertices.
+
+    /**
+     * Sets the name of the LCIO collection for beam spot constrained V0
+     * candidate vertices.
+     *
      * @param beamConV0VerticesColName - The LCIO collection name.
      */
     public void setBeamConV0VerticesColName(String beamConV0VerticesColName) {
         this.beamConV0VerticesColName = beamConV0VerticesColName;
     }
-    
+
     /**
      * Sets the beam size sigma in the x-direction.
+     *
      * @param sigmaX - The standard deviation of the beam width in the
      * x-direction.
      */
-    public void setBeamSigmaX(double sigmaX) { beamSize[1] = sigmaX; }
-    
+    public void setBeamSigmaX(double sigmaX) {
+        beamSize[1] = sigmaX;
+    }
+
     /**
      * Sets the beam size sigma in the y-direction.
+     *
      * @param sigmaY - The standard deviation of the beam width in the
      * y-direction.
      */
-    public void setBeamSigmaY(double sigmaY) { beamSize[2] = sigmaY; }
-    
-    /**
-     * Indicates whether verbose debug text should be written out during
-     * runtime or note. Defaults to <code>false</code>.
-     * @param debug - <code>true</code> indicates that debug text should
-     * be written and <code>false</code> that it should be suppressed.
-     */
-    public void setDebug(boolean debug) { this.debug = debug; }
-    
-    /**
-     * Sets the maximum allowed separation distance between a matched
-     * cluster and track pair.
+    public void setBeamSigmaY(double sigmaY) {
+        beamSize[2] = sigmaY;
+    }
+
+    /**
+     * Indicates whether verbose debug text should be written out during runtime
+     * or note. Defaults to <code>false</code>.
+     *
+     * @param debug - <code>true</code> indicates that debug text should be
+     * written and <code>false</code> that it should be suppressed.
+     */
+    public void setDebug(boolean debug) {
+        this.debug = debug;
+    }
+
+    /**
+     * Sets the maximum allowed separation distance between a matched cluster
+     * and track pair.
+     *
      * @param dxCut - The maximum separation distance in the x-direction.
      */
     public void setDxCut(double dxCut) {
         this.dxCut = dxCut;
     }
-    
-    /**
-     * Sets the maximum allowed separation distance between a matched
-     * cluster and track pair.
+
+    /**
+     * Sets the maximum allowed separation distance between a matched cluster
+     * and track pair.
+     *
      * @param dyCut - The maximum separation distance in the y-direction.
      */
     public void setDyCut(double dyCut) {
         this.dyCut = dyCut;
     }
-    
+
     /**
      * Sets the LCIO collection name for calorimeter cluster data.
+     *
      * @param ecalClustersCollectionName - The LCIO collection name.
      */
     public void setEcalClusterCollectionName(String ecalClustersCollectionName) {
         this.ecalClustersCollectionName = ecalClustersCollectionName;
     }
-    
+
     /**
      * Sets the name of the LCIO collection for reconstructed particles.
+     *
      * @param finalStateParticlesColName - The LCIO collection name.
      */
     public void setFinalStateParticlesColName(String finalStateParticlesColName) {
         this.finalStateParticlesColName = finalStateParticlesColName;
     }
-    
-    /**
-     * Sets the name of the LCIO collection for target constrained V0
-     * candidate particles.
+
+    /**
+     * Sets the name of the LCIO collection for target constrained V0 candidate
+     * particles.
+     *
      * @param targetConV0CandidatesColName - The LCIO collection name.
      */
     public void setTargetConV0CandidatesColName(String targetConV0CandidatesColName) {
         this.targetConV0CandidatesColName = targetConV0CandidatesColName;
     }
-    
-    /**
-     * Sets the name of the LCIO collection for target constrained V0
-     * candidate vertices.
+
+    /**
+     * Sets the name of the LCIO collection for target constrained V0 candidate
+     * vertices.
+     *
      * @param targetConV0VerticesColName - The LCIO collection name.
      */
     public void setTargetConV0VerticesColName(String targetConV0VerticesColName) {
         this.targetConV0VerticesColName = targetConV0VerticesColName;
     }
-    
+
     /**
      * Sets the LCIO collection name for particle track data.
+     *
      * @param tracksCollectionName - The LCIO collection name.
      */
     public void setTracksCollectionName(String tracksCollectionName) {
         this.tracksCollectionName = tracksCollectionName;
     }
-    
-    /**
-     * Sets the name of the LCIO collection for unconstrained V0
-     * candidate particles.
+
+    /**
+     * Sets the name of the LCIO collection for unconstrained V0 candidate
+     * particles.
+     *
      * @param unconstrainedV0CandidatesColName - The LCIO collection name.
      */
     public void setUnconstrainedV0CandidatesColName(String unconstrainedV0CandidatesColName) {
         this.unconstrainedV0CandidatesColName = unconstrainedV0CandidatesColName;
     }
-    
-    /**
-     * Sets the name of the LCIO collection for unconstrained V0
-     * candidate vertices.
+
+    /**
+     * Sets the name of the LCIO collection for unconstrained V0 candidate
+     * vertices.
+     *
      * @param unconstrainedV0VerticesColName - The LCIO collection name.
      */
     public void setUnconstrainedV0VerticesColName(String unconstrainedV0VerticesColName) {
         this.unconstrainedV0VerticesColName = unconstrainedV0VerticesColName;
     }
-    
-    /**
-     * Updates the magnetic field parameters to match the appropriate
-     * values for the current detector settings.
+
+    /**
+     * Updates the magnetic field parameters to match the appropriate values for
+     * the current detector settings.
      */
     @Override
     protected void detectorChanged(Detector detector) {
         // Set the magnetic field parameters to the appropriate values.
         Hep3Vector ip = new BasicHep3Vector(0., 0., 1.);
         bField = detector.getFieldMap().getField(ip).y();
-        if (bField < 0) { flipSign = -1; }
-    }
-    
-    /**
-     * Generates reconstructed V0 candidate particles and vertices from
-     * sets of positrons and electrons. Implementing methods should
-     * place the reconstructed vertices and candidate particles into the
-     * appropriate class variable lists in <code>ReconParticleDriver
+        if (bField < 0) {
+            flipSign = -1;
+        }
+    }
+
+    /**
+     * Generates reconstructed V0 candidate particles and vertices from sets of
+     * positrons and electrons. Implementing methods should place the
+     * reconstructed vertices and candidate particles into the appropriate class
+     * variable lists in <code>ReconParticleDriver
      * </code>.
+     *
      * @param electrons - The list of electrons.
      * @param positrons - The list of positrons.
      */
     protected abstract void findVertices(List<ReconstructedParticle> electrons, List<ReconstructedParticle> positrons);
-    
-    /**
-     * Create the set of final state particles from the event tracks
-     * and clusters. Clusters will be matched with tracks when this
-     * is possible.
+
+    /**
+     * Create the set of final state particles from the event tracks and
+     * clusters. Clusters will be matched with tracks when this is possible.
+     *
      * @param clusters - The list of event clusters.
      * @param tracks - The list of event tracks.
-     * @return Returns a <code>List</code> collection containing all
-     * of the <code>ReconstructedParticle</code> objects generated from
-     * the argument data.
+     * @return Returns a <code>List</code> collection containing all of the
+     * <code>ReconstructedParticle</code> objects generated from the argument
+     * data.
      */
     protected List<ReconstructedParticle> makeReconstructedParticles(List<Cluster> clusters, List<Track> tracks) {
         // Create a list in which to store reconstructed particles.
         List<ReconstructedParticle> particles = new ArrayList<ReconstructedParticle>();
-        
+
         // Create a list of unmatched clusters. A cluster should be
         // removed from the list if a matching track is found.
         //List<Cluster> unmatchedClusters = new ArrayList<Cluster>(clusters);
         java.util.Set<Cluster> unmatchedClusters = new java.util.HashSet<Cluster>(clusters);
-        
+
         // Iterate over all of the tracks and generate reconstructed
         // particles for each one. If possible, match a cluster to the
         // track as well.
@@ -196,33 +218,32 @@
             // Create a reconstructed particle to represent the track.
             ReconstructedParticle particle = new BaseReconstructedParticle();
             HepLorentzVector fourVector = new BasicHepLorentzVector(0, 0, 0, 0);
-            
+
             // Store the track in the particle.
             particle.addTrack(track);
-            
+
             // Store the momentum derived from the track in the particle.
             Hep3Vector momentum = new BasicHep3Vector(track.getTrackStates().get(0).getMomentum());
             momentum = CoordinateTransformations.transformVectorToDetector(momentum);
             ((BasicHepLorentzVector) fourVector).setV3(fourVector.t(), momentum);
-            
+
             // Derive the charge of the particle from the track.
             ((BaseReconstructedParticle) particle).setCharge(track.getCharge() * flipSign);
-            
+
             // Extrapolate the particle ID from the track. Positively
             // charged particles are assumed to be positrons and those
             // with negative charges are assumed to be electrons.
             if (particle.getCharge() > 0) {
                 ((BaseReconstructedParticle) particle).setParticleIdUsed(new SimpleParticleID(-11, 0, 0, 0));
-            }
-            else if (particle.getCharge() < 0) {
+            } else if (particle.getCharge() < 0) {
                 ((BaseReconstructedParticle) particle).setParticleIdUsed(new SimpleParticleID(11, 0, 0, 0));
             }
-            
+
             // Track the best matching cluster for the track. A null
             // value indicates that no cluster matches the track to
             // within the maximum displacement limits.
             Cluster matchedCluster = null;
-            
+
             // Loop through all the unmatched clusters and select the
             // cluster, if any, that best fits with the track.
             clusterLoop:
@@ -231,76 +252,96 @@
                 if (isMatch(cluster, track)) {
                     // Store the matched cluster.
                     matchedCluster = cluster;
-                    
+
                     // Since a match has been found, the loop can be
                     // terminated.
                     break clusterLoop;
                 }
             }
-            
+
             // If a cluster was found that matches the track...
             if (matchedCluster != null) {
+
+                if (matchedCluster instanceof HPSEcalClusterIC) {
+                    int pid = particle.getParticleIDUsed().getPDG();
+                    if (pid != 11) {
+                        ((HPSEcalClusterIC) matchedCluster).setParticleID(pid);
+                    }// End of cluster position/energy corrections. 
+                }
+
                 // Update the reconstructed particle with the data from
                 // the cluster.
                 particle.addCluster(matchedCluster);
                 ((BasicHepLorentzVector) fourVector).setT(matchedCluster.getEnergy());
-                
+
                 // Remove the cluster from the set of unmatched clusters.
                 unmatchedClusters.remove(matchedCluster);
             }
-            
+
             // Store the momentum vector in the reconstructed particle.
             ((BaseReconstructedParticle) particle).set4Vector(fourVector);
-            
+
             // Add the particle to the list of reconstructed particles.
             particles.add(particle);
         }
-        
+
         // If any cluster remain unmatched after the tracks are finished,
         // they should be processed into additional reconstructed particles.
-        if (!unmatchedClusters.isEmpty())
-            // Iterate over the remaining unmatched clusters.
+        if (!unmatchedClusters.isEmpty()) // Iterate over the remaining unmatched clusters.
+        {
             for (Cluster unmatchedCluster : unmatchedClusters) {
                 // Create a reconstructed particle to represent the
                 // unmatched cluster.
                 ReconstructedParticle particle = new BaseReconstructedParticle();
                 HepLorentzVector fourVector = new BasicHepLorentzVector(0, 0, 0, 0);
-                
+
                 // Add the cluster to the particle.
                 particle.addCluster(unmatchedCluster);
-                
+
                 // Set the reconstructed particle properties based on
                 // the cluster properties.
                 ((BasicHepLorentzVector) fourVector).setT(unmatchedCluster.getEnergy());
                 ((BaseReconstructedParticle) particle).setCharge(0);
                 ((BaseReconstructedParticle) particle).set4Vector(fourVector);
-                
+
                 // The particle is assumed to be a photon, since it
                 // did not leave any track.
                 ((BaseReconstructedParticle) particle).setParticleIdUsed(new SimpleParticleID(22, 0, 0, 0));
-                
+
+                if (unmatchedCluster instanceof HPSEcalClusterIC) {
+                    int pid = particle.getParticleIDUsed().getPDG();
+                    if (pid != 11) {
+                        ((HPSEcalClusterIC) unmatchedCluster).setParticleID(pid);
+                    }// End of cluster position/energy corrections. 
+                }
+
                 // Add the particle to the reconstructed particle list.
                 particles.add(particle);
             }
-        
+        }
+
         // Return the list of reconstructed particles.
         return particles;
     }
 
     /**
-     * Prints a message as per <code>System.out.println</code> to the
-     * output stream if the verbose debug output option is enabled.
+     * Prints a message as per <code>System.out.println</code> to the output
+     * stream if the verbose debug output option is enabled.
+     *
      * @param debugMessage - The message to print.
      */
     protected void printDebug(String debugMessage) {
         // If verbose debug mode is enabled, print out the message.
-        if(debug) { System.out.printf("%s :: %s%n", simpleName, debugMessage); }
-    }
-    
+        if (debug) {
+            System.out.printf("%s :: %s%n", simpleName, debugMessage);
+        }
+    }
+
     /**
      * Processes the track and cluster collections in the event into
-     * reconstructed particles and V0 candidate particles and vertices.
-     * These reconstructed particles are then stored in the event.
+     * reconstructed particles and V0 candidate particles and vertices. These
+     * reconstructed particles are then stored in the event.
+     *
      * @param event - The event to process.
      */
     @Override
@@ -310,27 +351,28 @@
         if (!event.hasCollection(Cluster.class, ecalClustersCollectionName)) {
             return;
         }
-        
+
         // VERBOSE :: Note that a new event is being read.
         printDebug("\nProcessing Event...");
-        
+
         // Otherwise, get the list of calorimeter clusters.
         List<Cluster> clusters = event.get(Cluster.class, ecalClustersCollectionName);
-        
+
         // VERBOSE :: Output the number of clusters in the event.
         printDebug("Clusters :: " + clusters.size());
-        
+
         // Get the set of tracks from the event. If no such collection
         // exists, initialize an empty list instead.
         List<Track> tracks;
-        if(event.hasCollection(Track.class, tracksCollectionName)) {
+        if (event.hasCollection(Track.class, tracksCollectionName)) {
             tracks = event.get(Track.class, tracksCollectionName);
-        }
-        else { tracks = new ArrayList<Track>(0); }
-        
+        } else {
+            tracks = new ArrayList<Track>(0);
+        }
+
         // VERBOSE :: Output the number of tracks in the event.
         printDebug("Tracks :: " + tracks.size());
-        
+
         // Instantiate new lists to store reconstructed particles and
         // V0 candidate particles and vertices.
         finalStateParticles = new ArrayList<ReconstructedParticle>();
@@ -342,35 +384,37 @@
         unconstrainedV0Vertices = new ArrayList<Vertex>();
         beamConV0Vertices = new ArrayList<Vertex>();
         targetConV0Vertices = new ArrayList<Vertex>();
-        
+
         // Generate the reconstructed particles.
         finalStateParticles = makeReconstructedParticles(clusters, tracks);
-        
+
         // VERBOSE :: Output the number of reconstructed particles.
         printDebug("Final State Particles :: " + finalStateParticles.size());
-        
+
         // Store the reconstructed particles collection.
         event.put(finalStateParticlesColName, finalStateParticles, ReconstructedParticle.class, 0);
-        
+
         // Separate the reconstructed particles into electrons and
         // positrons so that V0 candidates can be generated from them.
         for (ReconstructedParticle finalStateParticle : finalStateParticles) {
             // If the charge is positive, assume an electron.
-            if(finalStateParticle.getCharge() > 0) { positrons.add(finalStateParticle); }
-            
-            // Otherwise, assume the particle is a positron.
-            else if(finalStateParticle.getCharge() < 0) { electrons.add(finalStateParticle); }
-        }
-        
+            if (finalStateParticle.getCharge() > 0) {
+                positrons.add(finalStateParticle);
+            } // Otherwise, assume the particle is a positron.
+            else if (finalStateParticle.getCharge() < 0) {
+                electrons.add(finalStateParticle);
+            }
+        }
+
         // VERBOSE :: Output the number of reconstructed positrons
         // and electrons.
         printDebug("Number of Electrons: " + electrons.size());
         printDebug("Number of Positrons: " + positrons.size());
-        
+
         // Form V0 candidate particles and vertices from the electron
         // and positron reconstructed particles.
         findVertices(electrons, positrons);
-        
+
         // Store the V0 candidate particles and vertices for each type
         // of constraint in the appropriate collection in the event,
         // as long as a collection name is defined.
@@ -399,43 +443,65 @@
             event.put(targetConV0VerticesColName, targetConV0Vertices, Vertex.class, 0);
         }
     }
-    
-    /**
-     * Sets the LCIO collection names to their default values if they
-     * are not already defined.
+
+    /**
+     * Sets the LCIO collection names to their default values if they are not
+     * already defined.
      */
     @Override
     protected void startOfData() {
         // If any of the LCIO collection names are not properly defined, define them now.
-        if(ecalClustersCollectionName == null) { ecalClustersCollectionName = "EcalClusters"; }
-        if(tracksCollectionName == null) { tracksCollectionName = "MatchedTracks"; }
-        if(finalStateParticlesColName == null) { finalStateParticlesColName = "FinalStateParticles"; }
-        if(unconstrainedV0CandidatesColName == null) { unconstrainedV0CandidatesColName = "UnconstrainedV0Candidates"; }
-        if(beamConV0CandidatesColName == null) { beamConV0CandidatesColName = "BeamspotConstrainedV0Candidates"; }
-        if(targetConV0CandidatesColName == null) { targetConV0CandidatesColName = "TargetConstrainedV0Candidates"; }
-        if(unconstrainedV0VerticesColName == null) { unconstrainedV0VerticesColName = "UnconstrainedV0Vertices"; }
-        if(beamConV0VerticesColName == null) { beamConV0VerticesColName = "BeamspotConstrainedV0Vertices"; }
-        if(targetConV0VerticesColName == null) { targetConV0VerticesColName = "TargetConstrainedV0Vertices"; }
-    }
-    
-    /**
-     * Determines if a cluster is a potential match for a given track.
-     * If it is, returns the distance between the extrapolation of the
-     * track to the z-position of the cluster and the cluster position.
-     * Otherwise, returns <code>null</code> to indicate that the pair
-     * is not a valid match.
+        if (ecalClustersCollectionName == null) {
+            ecalClustersCollectionName = "EcalClusters";
+        }
+        if (tracksCollectionName == null) {
+            tracksCollectionName = "MatchedTracks";
+        }
+        if (finalStateParticlesColName == null) {
+            finalStateParticlesColName = "FinalStateParticles";
+        }
+        if (unconstrainedV0CandidatesColName == null) {
+            unconstrainedV0CandidatesColName = "UnconstrainedV0Candidates";
+        }
+        if (beamConV0CandidatesColName == null) {
+            beamConV0CandidatesColName = "BeamspotConstrainedV0Candidates";
+        }
+        if (targetConV0CandidatesColName == null) {
+            targetConV0CandidatesColName = "TargetConstrainedV0Candidates";
+        }
+        if (unconstrainedV0VerticesColName == null) {
+            unconstrainedV0VerticesColName = "UnconstrainedV0Vertices";
+        }
+        if (beamConV0VerticesColName == null) {
+            beamConV0VerticesColName = "BeamspotConstrainedV0Vertices";
+        }
+        if (targetConV0VerticesColName == null) {
+            targetConV0VerticesColName = "TargetConstrainedV0Vertices";
+        }
+    }
+
+    /**
+     * Determines if a cluster is a potential match for a given track. If it is,
+     * returns the distance between the extrapolation of the track to the
+     * z-position of the cluster and the cluster position. Otherwise, returns
+     * <code>null</code> to indicate that the pair is not a valid match.
+     *
      * @param cluster - The cluster to check.
      * @param track - The track to check.
-     * @return Returns the distance between the cluster and extrapolated
-     * track position in millimeters as a <code>Double</code> if the
-     * pair is a potential match. Returns <code>null</code> otherwise.
+     * @return Returns the distance between the cluster and extrapolated track
+     * position in millimeters as a <code>Double</code> if the pair is a
+     * potential match. Returns <code>null</code> otherwise.
      */
     private boolean isMatch(Cluster cluster, Track track) {
         // Get the position of the cluster and extrapolate the position
         // of the track at the z-position of the cluster.
+
         Hep3Vector clusterPosition = new BasicHep3Vector(cluster.getPosition());
+        if (cluster instanceof HPSEcalClusterIC) {
+            clusterPosition = new BasicHep3Vector(((HPSEcalClusterIC) cluster).getCorrPosition());
+        }
         Hep3Vector trackPosAtEcal = TrackUtils.extrapolateTrack(track, clusterPosition.z());
-        
+
         // TODO: There are some track whose extrapolated coordinates
         //       are NaN. The problem seems to be that the y-coordinate
         //       of the extrapolated helix is found to be non-real. This
@@ -451,12 +517,12 @@
             // Return false to indicate that the pair do not match.
             return false;
         }
-        
+
         // VERBOSE :: Output the position of the extrapolated track
         //            and the cluster.
         printDebug("\tCluster Position :: " + clusterPosition.toString());
         printDebug("\tTrack Position   :: " + trackPosAtEcal.toString());
-        
+
         // If one of either the cluster or extrapolated track fall on
         // one volume of the detector and the other is in the other
         // volume, then they can not be a match. (i.e. both parts of
@@ -468,7 +534,7 @@
             // Return false to indicate that the pair do not match.
             return false;
         }
-        
+
         // Check to make sure that the x and y displacements between
         // the extrapolated track position and cluster position are
         // within the allowed bounds. If they are not, this pair is
@@ -480,84 +546,139 @@
             // Return false to indicate that the pair do not match.
             return false;
         }
-        
+
         if (Math.abs(trackPosAtEcal.y() - clusterPosition.y()) > dyCut) {
             // VERBOSE :: Indicate the reason for the match failing.
             printDebug("\tFailure :: Pair y-displacement exceeds allowed threshold.");
-            
+
             // Return false to indicate that the pair do not match.
             return false;
         }
-        
+
         // VERBOSE :: Indicate the reason for the match failing.
         printDebug("\tSuccess :: Cluster/track pair match!.");
-        
+
         // A pair that has reached this point is a potential match.
         // Return true to indicate a match.
         return true;
     }
-    
+
     // ==============================================================
     // ==== Class Variables =========================================
     // ==============================================================
     // Local variables.
-    /** The maximum separation distance in the x-direction beyond which
-     * a cluster and track will be rejected for pairing. */
+    /**
+     * The maximum separation distance in the x-direction beyond which a cluster
+     * and track will be rejected for pairing.
+     */
     private double dxCut = 20.0;
-    /** The maximum separation distance in the y-direction beyond which
-     * a cluster and track will be rejected for pairing. */
+    /**
+     * The maximum separation distance in the y-direction beyond which a cluster
+     * and track will be rejected for pairing.
+     */
     private double dyCut = 20.0;
-    /** Indicates whether debug text should be output or not. */
+    /**
+     * Indicates whether debug text should be output or not.
+     */
     private boolean debug = false;
-    /** The simple name of the class used for debug print statements. */
+    /**
+     * The simple name of the class used for debug print statements.
+     */
     private final String simpleName = getClass().getSimpleName();
-    
+
     // Reconstructed Particle Lists
-    /** Stores reconstructed electron particles. */
+    /**
+     * Stores reconstructed electron particles.
+     */
     private List<ReconstructedParticle> electrons;
-    /** Stores reconstructed positron particles. */
+    /**
+     * Stores reconstructed positron particles.
+     */
     private List<ReconstructedParticle> positrons;
-    /** Stores particles reconstructed from an event. */
+    /**
+     * Stores particles reconstructed from an event.
+     */
     protected List<ReconstructedParticle> finalStateParticles;
-    /** Stores reconstructed V0 candidate particles generated without constraints. */
+    /**
+     * Stores reconstructed V0 candidate particles generated without
+     * constraints.
+     */
     protected List<ReconstructedParticle> unconstrainedV0Candidates;
-    /** Stores reconstructed V0 candidate particles generated with beam spot constraints. */
+    /**
+     * Stores reconstructed V0 candidate particles generated with beam spot
+     * constraints.
+     */
     protected List<ReconstructedParticle> beamConV0Candidates;
-    /** Stores reconstructed V0 candidate particles generated with target constraints. */
+    /**
+     * Stores reconstructed V0 candidate particles generated with target
+     * constraints.
+     */
     protected List<ReconstructedParticle> targetConV0Candidates;
-    /** Stores reconstructed V0 candidate vertices generated without constraints. */
+    /**
+     * Stores reconstructed V0 candidate vertices generated without constraints.
+     */
     protected List<Vertex> unconstrainedV0Vertices;
-    /** Stores reconstructed V0 candidate vertices generated with beam spot constraints. */
+    /**
+     * Stores reconstructed V0 candidate vertices generated with beam spot
+     * constraints.
+     */
     protected List<Vertex> beamConV0Vertices;
-    /** Stores reconstructed V0 candidate vertices generated with target constraints. */
+    /**
+     * Stores reconstructed V0 candidate vertices generated with target
+     * constraints.
+     */
     protected List<Vertex> targetConV0Vertices;
-    
+
     // LCIO Collection Names
-    /** LCIO collection name for calorimeter clusters. */
+    /**
+     * LCIO collection name for calorimeter clusters.
+     */
     private String ecalClustersCollectionName = "EcalClusters";
-    /** LCIO collection name for tracks. */
+    /**
+     * LCIO collection name for tracks.
+     */
     private String tracksCollectionName = "MatchedTracks";
-    /** LCIO collection name for reconstructed particles. */
+    /**
+     * LCIO collection name for reconstructed particles.
+     */
     private String finalStateParticlesColName = "FinalStateParticles";
-    /** LCIO collection name for V0 candidate particles generated without constraints. */
+    /**
+     * LCIO collection name for V0 candidate particles generated without
+     * constraints.
+     */
     protected String unconstrainedV0CandidatesColName = null;
-    /** LCIO collection name for V0 candidate particles generated with beam spot constraints. */
+    /**
+     * LCIO collection name for V0 candidate particles generated with beam spot
+     * constraints.
+     */
     protected String beamConV0CandidatesColName = null;
-    /** LCIO collection name for V0 candidate particles generated with target constraints. */
+    /**
+     * LCIO collection name for V0 candidate particles generated with target
+     * constraints.
+     */
     protected String targetConV0CandidatesColName = null;
-    /** LCIO collection name for V0 candidate vertices generated without constraints. */
+    /**
+     * LCIO collection name for V0 candidate vertices generated without
+     * constraints.
+     */
     protected String unconstrainedV0VerticesColName = null;
-    /** LCIO collection name for V0 candidate vertices generated with beam spot constraints. */
+    /**
+     * LCIO collection name for V0 candidate vertices generated with beam spot
+     * constraints.
+     */
     protected String beamConV0VerticesColName = null;
-    /** LCIO collection name for V0 candidate vertices generated with target constraints. */
+    /**
+     * LCIO collection name for V0 candidate vertices generated with target
+     * constraints.
+     */
     protected String targetConV0VerticesColName = null;
-    
+
     // Beam size variables.
     // The beamsize array is in the tracking frame
     /* TODO  mg-May 14, 2014:  the the beam size from the conditions db...also beam position!  */
     protected double[] beamSize = {0.001, 0.2, 0.02};
     protected double bField;
-    
+
     //  flipSign is a kludge...
     //  HelicalTrackFitter doesn't deal with B-fields in -ive Z correctly
     //  so we set the B-field in +iveZ and flip signs of fitted tracks

Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineNoPileupRecon.lcsim
 =============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineNoPileupRecon.lcsim	(original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineNoPileupRecon.lcsim	Fri Nov 14 13:06:01 2014
@@ -62,7 +62,7 @@
             <ecalCollectionName>EcalCalHits</ecalCollectionName>
             <timeCut>true</timeCut>
         </driver>
-        <driver name="ReconParticle" type="org.hps.recon.particle.HpsReconParticleDriverIC">          
+        <driver name="ReconParticle" type="org.hps.recon.particle.HpsReconParticleDriver">          
         </driver>
         <driver name="TrackDataDriver" type="org.hps.recon.tracking.TrackDataDriver" />
         <driver name="LCIOWriter" type="org.lcsim.util.loop.LCIODriver">

Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineRecon.lcsim
 =============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineRecon.lcsim	(original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineRecon.lcsim	Fri Nov 14 13:06:01 2014
@@ -65,7 +65,7 @@
             <ecalCollectionName>EcalCalHits</ecalCollectionName>
             <timeCut>true</timeCut>
         </driver>
-        <driver name="ReconParticle" type="org.hps.recon.particle.HpsReconParticleDriverIC">          
+        <driver name="ReconParticle" type="org.hps.recon.particle.HpsReconParticleDriver">          
         </driver>
         <driver name="TrackDataDriver" type="org.hps.recon.tracking.TrackDataDriver" />
         <driver name="LCIOWriter" type="org.lcsim.util.loop.LCIODriver">

Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineTruthRecon.lcsim
 =============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineTruthRecon.lcsim	(original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineTruthRecon.lcsim	Fri Nov 14 13:06:01 2014
@@ -67,7 +67,7 @@
             <ecalCollectionName>EcalCalHits</ecalCollectionName>
             <timeCut>true</timeCut>
         </driver>
-        <driver name="ReconParticle" type="org.hps.recon.particle.HpsReconParticleDriverIC">          
+        <driver name="ReconParticle" type="org.hps.recon.particle.HpsReconParticleDriver">          
         </driver>
         <driver name="TrackDataDriver" type="org.hps.recon.tracking.TrackDataDriver" />
         <driver name="LCIOWriter" type="org.lcsim.util.loop.LCIODriver">

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

November 2017
August 2017
July 2017
January 2017
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use