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">
|