Author: [log in to unmask]
Date: Wed Apr 22 12:44:22 2015
New Revision: 2785
Log:
updated cluster property corrections use after reconclusterer
Modified:
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterEnergyCorrection.java
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterPositionCorrection.java
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ReconClusterPropertyCalculator.java
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterEnergyCorrection.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterEnergyCorrection.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterEnergyCorrection.java Wed Apr 22 12:44:22 2015
@@ -4,8 +4,12 @@
import org.lcsim.event.base.BaseCluster;
/**
- * Cluster energy correction algorithm extracted from <code>HPSEcalClusterIC</code> class.
+ * This is the cluster energy correction requiring the particle id
+ * uncorrected cluster energy. This is not accurate for edge crystals
+ * and should be used after cluster-track matching and after position
+ * corrections.
*
+ * @author Holly Vance <[log in to unmask]>
* @author Jeremy McCormick <[log in to unmask]>
*/
public final class ClusterEnergyCorrection {
@@ -71,12 +75,13 @@
/**
* Calculates the energy correction to a cluster given the variables from the fit as per
* <a href="https://misportal.jlab.org/mis/physics/hps_notes/index.cfm?note_year=2014">HPS Note 2014-001</a>
+ * Note that this is correct as there is a typo in the formula print in the note.
* @param rawEnergy Raw energy of the cluster
* @param A,B,C from fitting in note
* @return Corrected Energy
*/
private static double computeCorrectedEnergy(double rawEnergy, double varA, double varB, double varC){
- double corrEnergy = rawEnergy / (varA * rawEnergy + varB / (Math.sqrt(rawEnergy)) + varC);
+ double corrEnergy = rawEnergy / (varA / rawEnergy + varB / (Math.sqrt(rawEnergy)) + varC);
return corrEnergy;
}
}
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterPositionCorrection.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterPositionCorrection.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterPositionCorrection.java Wed Apr 22 12:44:22 2015
@@ -4,36 +4,37 @@
import org.lcsim.event.base.BaseCluster;
/**
- * <p>
- * Cluster position corrections taken from the <code>HPSEcalClusterIC</code> class.
- * <p>
- * This should be used before the energy is corrected on the Cluster.
+ * This uses the uncorrected cluster energy to correct the position of the cluster.
+ * This should be used before the energy is corrected on the Cluster and after
+ * cluster-track matching.
*
+ * @author Holly Vance <[log in to unmask]>
* @author Jeremy McCormick <[log in to unmask]>
*/
public final class ClusterPositionCorrection {
// Variables for electron position corrections.
- static final double ELECTRON_POS_A = 0.0066;
- static final double ELECTRON_POS_B = -0.03;
- static final double ELECTRON_POS_C = 0.028;
- static final double ELECTRON_POS_D = -0.45;
- static final double ELECTRON_POS_E = 0.465;
+ static final double ELECTRON_POS_A1 = 0.0066;
+ static final double ELECTRON_POS_A2 = -0.03;
+ static final double ELECTRON_POS_B1 = 0.028;
+ static final double ELECTRON_POS_B2 = -0.451;
+ static final double ELECTRON_POS_B3 = 0.465;
// Variables for positron position corrections.
- static final double POSITRON_POS_A = 0.0072;
- static final double POSITRON_POS_B = -0.031;
- static final double POSITRON_POS_C = 0.007;
- static final double POSITRON_POS_D = 0.342;
- static final double POSITRON_POS_E = 0.108;
+ static final double POSITRON_POS_A1 = 0.0072;
+ static final double POSITRON_POS_A2 = -0.031;
+ static final double POSITRON_POS_B1 = 0.007;
+ static final double POSITRON_POS_B2 = 0.342;
+ static final double POSITRON_POS_B3 = 0.108;
// Variables for photon position corrections.
- static final double PHOTON_POS_A = 0.005;
- static final double PHOTON_POS_B = -0.032;
- static final double PHOTON_POS_C = 0.011;
- static final double PHOTON_POS_D = -0.037;
- static final double PHOTON_POS_E = 0.294;
+ static final double PHOTON_POS_A1 = 0.005;
+ static final double PHOTON_POS_A2 = -0.032;
+ static final double PHOTON_POS_B1 = 0.011;
+ static final double PHOTON_POS_B2 = -0.037;
+ static final double PHOTON_POS_B3 = 0.294;
+
public static double[] calculateCorrectedPosition(Cluster cluster) {
double clusterPosition[] = cluster.getPosition();
double correctedPosition = computeCorrectedPosition(cluster.getParticleId(), clusterPosition[0], cluster.getEnergy());
@@ -58,17 +59,17 @@
* @return Corrected x position
*/
private static double computeCorrectedPosition(int pdg, double xPos, double rawEnergy) {
- double xCl = xPos / 10.0;//convert to mm
+ double xCl = xPos / 10.0;//convert to cm
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);
+ xCorr = positionCorrection(xCl, rawEnergy, ELECTRON_POS_A1, ELECTRON_POS_A2, ELECTRON_POS_B1, ELECTRON_POS_B2, ELECTRON_POS_B3);
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);
+ xCorr = positionCorrection(xCl, rawEnergy, POSITRON_POS_A1, POSITRON_POS_A2, POSITRON_POS_B1, POSITRON_POS_B2, POSITRON_POS_B3);
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);
+ xCorr = positionCorrection(xCl, rawEnergy, PHOTON_POS_A1, PHOTON_POS_A2, PHOTON_POS_B1, PHOTON_POS_B2, PHOTON_POS_B3);
return xCorr * 10.0;
default: //Unknown
xCorr = xCl;
@@ -82,14 +83,14 @@
* <a href="https://misportal.jlab.org/mis/physics/hps_notes/index.cfm?note_year=2014">HPS Note 2014-001</a>
* @param xCl
* @param rawEnergy
- * @param varA
- * @param varB
- * @param varC
- * @param varD
- * @param varE
+ * @param varA1
+ * @param varA2
+ * @param varB1
+ * @param varB2
+ * @param varB3
* @return
*/
- private static double positionCorrection(double xCl, double rawEnergy, double varA, double varB, double varC, double varD, double varE) {
- return xCl - (varA / Math.sqrt(rawEnergy) + varB ) * xCl - (varC * rawEnergy + varD / Math.sqrt(rawEnergy) + varE);
+ private static double positionCorrection(double xCl, double rawEnergy, double varA1, double varA2, double varB1, double varB2, double varB3) {
+ return ((xCl - (varB1 * rawEnergy + varB2 / Math.sqrt(rawEnergy) + varB3))/(varA1 / Math.sqrt(rawEnergy) + varA2 + 1));
}
}
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ReconClusterPropertyCalculator.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ReconClusterPropertyCalculator.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ReconClusterPropertyCalculator.java Wed Apr 22 12:44:22 2015
@@ -43,9 +43,10 @@
EcalCrystal crystal = (EcalCrystal) hit.getDetectorElement();
Hep3Vector crystalPosition = crystal.getPositionFront();
- eNumX += Math.max(0.0, (w0 + Math.log(hit.getCorrectedEnergy() / cluster.getEnergy()))) * (crystalPosition.x() / 10.0);
- eNumY += Math.max(0.0, (w0 + Math.log(hit.getCorrectedEnergy() / cluster.getEnergy()))) * (crystalPosition.y() / 10.0);
- eDen += Math.max(0.0, (w0 + Math.log(hit.getCorrectedEnergy() / cluster.getEnergy())));
+ double wi = Math.max(0.0, (w0 + Math.log(hit.getCorrectedEnergy() / cluster.getEnergy())));
+ eNumX += wi * (crystalPosition.x() / 10.0);
+ eNumY += wi * (crystalPosition.y() / 10.0);
+ eDen += wi;
} // end for iteration through clusterHits
|