Commit in java/branches/hps-java_HPSJAVA-88 on MAIN
monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/TrackingReconstructionPlots.java+5-41085 -> 1086
tracking/src/main/java/org/hps/recon/tracking/DumbShaperFit.java+14-91085 -> 1086
                                             /ShaperAnalyticFitAlgorithm.java+30-141085 -> 1086
                                             /ShaperFitAlgorithm.java+3-21085 -> 1086
                                             /ShaperLinearFitAlgorithm.java+34-131085 -> 1086
                                             /ShaperPileupFitAlgorithm.java+7-51085 -> 1086
users/src/main/java/org/hps/users/omoreno/SvtPerformance.java+1-11085 -> 1086
+94-48
7 modified files
Update ShaperFitAlgorithm and all subclasses to use the new conditions API.  All calibration constants are now retrieved from the HpsSiSensor associated with a raw hit instead of the HPSSVT*.ChannelConstants class.  All classes using any of the fitters were also updated. 

java/branches/hps-java_HPSJAVA-88/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt
TrackingReconstructionPlots.java 1085 -> 1086
--- java/branches/hps-java_HPSJAVA-88/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/TrackingReconstructionPlots.java	2014-09-25 00:09:11 UTC (rev 1085)
+++ java/branches/hps-java_HPSJAVA-88/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/TrackingReconstructionPlots.java	2014-09-25 00:36:13 UTC (rev 1086)
@@ -15,8 +15,8 @@
 import java.util.logging.Logger;
 
 import org.hps.conditions.deprecated.BeamlineConstants;
-import org.hps.conditions.deprecated.HPSSVTCalibrationConstants;
-import org.hps.conditions.deprecated.HPSSVTCalibrationConstants.ChannelConstants;
+//===> import org.hps.conditions.deprecated.HPSSVTCalibrationConstants;
+//===> import org.hps.conditions.deprecated.HPSSVTCalibrationConstants.ChannelConstants;
 import org.hps.conditions.deprecated.SvtUtils;
 import org.hps.recon.ecal.HPSEcalCluster;
 import org.hps.recon.tracking.DumbShaperFit;
@@ -833,8 +833,9 @@
                 for (HelicalTrackStrip hts : htcross.getStrips()) {
                     double clusterSum = 0;
                     for (RawTrackerHit rawHit : (List<RawTrackerHit>) hts.rawhits()) {
-                        ChannelConstants constants = HPSSVTCalibrationConstants.getChannelConstants((SiSensor) rawHit.getDetectorElement(), rawHit.getIdentifierFieldValue("strip"));
-                        for (ShapeFitParameters fit : _shaper.fitShape(rawHit, constants)) {
+                        //===> ChannelConstants constants = HPSSVTCalibrationConstants.getChannelConstants((SiSensor) rawHit.getDetectorElement(), rawHit.getIdentifierFieldValue("strip"));
+                    	//===>for (ShapeFitParameters fit : _shaper.fitShape(rawHit, constants)) {
+                    	for (ShapeFitParameters fit : _shaper.fitShape(rawHit)) {
                             double amp = fit.getAmp();
                             clusterSum += amp;
                             aida.histogram1D("Amp (HitOnTrack)").fill(amp);

java/branches/hps-java_HPSJAVA-88/tracking/src/main/java/org/hps/recon/tracking
DumbShaperFit.java 1085 -> 1086
--- java/branches/hps-java_HPSJAVA-88/tracking/src/main/java/org/hps/recon/tracking/DumbShaperFit.java	2014-09-25 00:09:11 UTC (rev 1085)
+++ java/branches/hps-java_HPSJAVA-88/tracking/src/main/java/org/hps/recon/tracking/DumbShaperFit.java	2014-09-25 00:36:13 UTC (rev 1086)
@@ -2,15 +2,17 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
-import org.hps.conditions.deprecated.HPSSVTCalibrationConstants.ChannelConstants;
+
+
+//===>import org.hps.conditions.deprecated.HPSSVTCalibrationConstants.ChannelConstants;
+import org.lcsim.detector.tracker.silicon.HpsSiSensor;
 import org.lcsim.event.RawTrackerHit;
 
 /**
  *
  * @author Matt Graham
  */
-// FIXME: Is there some other description besides "dumb" that could be used in this class name?
-// --JM
+// FIXME: Change the name of the class to SimpleShaperFit - OM
 // TODO: Add class documentation.
 public class DumbShaperFit implements ShaperFitAlgorithm {
 
@@ -24,19 +26,22 @@
     }
 
     @Override
-    public Collection<ShapeFitParameters> fitShape(RawTrackerHit rth, ChannelConstants constants) {
-        short[] adcVals = rth.getADCValues();
-        return this.fitShape(adcVals, constants);
+    public Collection<ShapeFitParameters> fitShape(RawTrackerHit rth) {
+        short[] samples = rth.getADCValues();
+        HpsSiSensor sensor =(HpsSiSensor) rth.getDetectorElement();
+        int channel = rth.getIdentifierFieldValue("strip");
+        return fitShape(channel, samples, sensor);
     }
-
-    public Collection<ShapeFitParameters> fitShape(short[] adcVals, ChannelConstants constants) {
+    
+    public Collection<ShapeFitParameters> fitShape(int channel, short[] samples, HpsSiSensor sensor){
+    	
         ShapeFitParameters fitresults = new ShapeFitParameters();
         double[] pedSub = {-99.0, -99.0, -99.0, -99.0, -99.0, -99.0};
         double maxADC = -99999;
         int iMax = -1;
         double t0 = -999;
         for (int i = 0; i < 6; i++) {
-            pedSub[i] = adcVals[i] - constants.getPedestal();
+            pedSub[i] = samples[i] - sensor.getPedestal(channel, i);
             if (pedSub[i] > maxADC) {
                 maxADC = pedSub[i];
                 iMax = i;

java/branches/hps-java_HPSJAVA-88/tracking/src/main/java/org/hps/recon/tracking
ShaperAnalyticFitAlgorithm.java 1085 -> 1086
--- java/branches/hps-java_HPSJAVA-88/tracking/src/main/java/org/hps/recon/tracking/ShaperAnalyticFitAlgorithm.java	2014-09-25 00:09:11 UTC (rev 1085)
+++ java/branches/hps-java_HPSJAVA-88/tracking/src/main/java/org/hps/recon/tracking/ShaperAnalyticFitAlgorithm.java	2014-09-25 00:36:13 UTC (rev 1086)
@@ -2,9 +2,11 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+
 import org.apache.commons.math3.special.Gamma;
-import org.hps.conditions.deprecated.HPSSVTCalibrationConstants.ChannelConstants;
+//===> import org.hps.conditions.deprecated.HPSSVTCalibrationConstants.ChannelConstants;
 import org.hps.conditions.deprecated.HPSSVTConstants;
+import org.lcsim.detector.tracker.silicon.HpsSiSensor;
 import org.lcsim.event.RawTrackerHit;
 
 /**
@@ -22,23 +24,27 @@
     }
 
     @Override
-    public Collection<ShapeFitParameters> fitShape(RawTrackerHit rth, ChannelConstants constants) {
-        return this.fitShape(rth.getADCValues(), constants);
+    public Collection<ShapeFitParameters> fitShape(RawTrackerHit rth) {
+        short[] samples = rth.getADCValues();
+        HpsSiSensor sensor =(HpsSiSensor) rth.getDetectorElement();
+        int channel = rth.getIdentifierFieldValue("strip");
+        return this.fitShape(channel, samples, sensor);
+    	//===> return this.fitShape(rth.getADCValues(), constants);
     }
 
-    public Collection<ShapeFitParameters> fitShape(short[] samples, ChannelConstants constants) {
+    public Collection<ShapeFitParameters> fitShape(int channel, short[] samples, HpsSiSensor sensor) {
         double minChisq = Double.POSITIVE_INFINITY;
         int bestStart = 0;
         ShapeFitParameters fit = new ShapeFitParameters();
         for (int i = 0; i < samples.length - 2; i++) {
-            double chisq = fitSection(samples, constants, fit, i);
+            double chisq = fitSection(channel, samples, sensor, fit, i);
             // System.out.println("i = " + i + ", " + fit);
             if (chisq < minChisq) {
                 minChisq = chisq;
                 bestStart = i;
             }
         }
-        fitSection(samples, constants, fit, bestStart);
+        fitSection(channel, samples, sensor, fit, bestStart);
         // System.out.format("%f\t%f\t%f\t%f\t%f\t%f\n", samples[0] - constants.getPedestal(),
         // samples[1] - constants.getPedestal(), samples[2] - constants.getPedestal(), samples[3] -
         // constants.getPedestal(), samples[4] - constants.getPedestal(), samples[5] -
@@ -49,21 +55,27 @@
         return fits;
     }
 
-    private double fitSection(short[] samples, ChannelConstants constants, ShapeFitParameters fit, int start) {
+    private double fitSection(int channel, short[] samples, HpsSiSensor sensor, ShapeFitParameters fit, int start) {
         int length = samples.length - start;
         double[] y = new double[length];
         double[] t = new double[length];
 
+        double tp = sensor.getShapeFitParameters(channel)[HpsSiSensor.TP_INDEX];
+
         for (int i = 0; i < length; i++) {
-            y[i] = samples[start + i] - constants.getPedestal();
+            //===> y[i] = samples[start + i] - constants.getPedestal();
+        	y[i] = samples[start + i] - sensor.getPedestal(channel, i);
             t[i] = HPSSVTConstants.SAMPLING_INTERVAL * i;
         }
 
         double[] p = new double[length];
         double[] a = new double[length];
         for (int i = 0; i < length; i++) {
-            p[i] = y[i] / constants.getNoise();
-            a[i] = Math.exp(1 - t[i] / constants.getTp()) / (constants.getTp() * constants.getNoise());
+            //===> p[i] = y[i] / constants.getNoise();
+            p[i] = y[i] / sensor.getNoise(channel, i);
+            //===> a[i] = Math.exp(1 - t[i] / constants.getTp()) / (constants.getTp() * constants.getNoise());
+            
+            a[i] = Math.exp(1 - t[i] /tp  / (tp * sensor.getNoise(channel, i)));
         }
 
         double pa, aatt, pat, aat, aa;
@@ -81,13 +93,15 @@
         }
 
         double t0 = (pa * aatt - pat * aat) / (pa * aat - aa * pat);
-        double A = pa / ((Math.exp(t0 / constants.getTp()) * (aat - t0 * aa)));
+        //===> double A = pa / ((Math.exp(t0 / constants.getTp()) * (aat - t0 * aa)));
+        double A = pa / ((Math.exp(t0 / tp) * (aat - t0 * aa)));
 
         double time_var = 0;
         double height_var = 0;
         for (int i = 0; i < length; i++) {
             double dt_dp = a[i] * (aatt - t[i] * aat - t0 * (aat - t[i] * aa)) / (pa * aat - aa * pat);
-            double dh_dp = (a[i] * Math.exp(-1.0 * t0 / constants.getTp()) + A * dt_dp * aa) / (aat - t0 * aa) - A * dt_dp / constants.getTp();
+            //===> double dh_dp = (a[i] * Math.exp(-1.0 * t0 / constants.getTp()) + A * dt_dp * aa) / (aat - t0 * aa) - A * dt_dp / constants.getTp();
+            double dh_dp = (a[i] * Math.exp(-1.0 * t0 / tp) + A * dt_dp * aa) / (aat - t0 * aa) - A * dt_dp / tp;
             time_var += dt_dp * dt_dp;
             height_var += dh_dp * dh_dp;
         }
@@ -100,8 +114,10 @@
         double chisq = 0;
         for (int i = 0; i < samples.length; i++) {
             double ti = HPSSVTConstants.SAMPLING_INTERVAL * i;
-            double fit_y = A * (Math.max(0, (ti - t0)) / constants.getTp()) * Math.exp(1 - (ti - t0) / constants.getTp()) + constants.getPedestal();
-            chisq += Math.pow((fit_y - samples[i]) / constants.getNoise(), 2);
+            //===> double fit_y = A * (Math.max(0, (ti - t0)) / constants.getTp()) * Math.exp(1 - (ti - t0) / constants.getTp()) + constants.getPedestal();
+            double fit_y = A * (Math.max(0, (ti - t0)) / tp) * Math.exp(1 - (ti - t0) / tp) + sensor.getPedestal(channel, i);
+            //===> chisq += Math.pow((fit_y - samples[i]) / constants.getNoise(), 2);
+            chisq += Math.pow((fit_y - samples[i]) / sensor.getNoise(channel, i), 2);
         }
 
         if (A > 0 && chisq < Double.POSITIVE_INFINITY) {

java/branches/hps-java_HPSJAVA-88/tracking/src/main/java/org/hps/recon/tracking
ShaperFitAlgorithm.java 1085 -> 1086
--- java/branches/hps-java_HPSJAVA-88/tracking/src/main/java/org/hps/recon/tracking/ShaperFitAlgorithm.java	2014-09-25 00:09:11 UTC (rev 1085)
+++ java/branches/hps-java_HPSJAVA-88/tracking/src/main/java/org/hps/recon/tracking/ShaperFitAlgorithm.java	2014-09-25 00:36:13 UTC (rev 1086)
@@ -1,7 +1,7 @@
 package org.hps.recon.tracking;
 
 import java.util.Collection;
-import org.hps.conditions.deprecated.HPSSVTCalibrationConstants.ChannelConstants;
+//import org.hps.conditions.deprecated.HPSSVTCalibrationConstants.ChannelConstants;
 import org.lcsim.event.RawTrackerHit;
 
 /**
@@ -11,7 +11,8 @@
 // TODO: Add class documentation.
 public interface ShaperFitAlgorithm {
 
-    public Collection<ShapeFitParameters> fitShape(RawTrackerHit rth, ChannelConstants constants);
+    //===> public Collection<ShapeFitParameters> fitShape(RawTrackerHit rth, ChannelConstants constants);
+    public Collection<ShapeFitParameters> fitShape(RawTrackerHit rawHit);
 
     public void setDebug(boolean debug);
 }

java/branches/hps-java_HPSJAVA-88/tracking/src/main/java/org/hps/recon/tracking
ShaperLinearFitAlgorithm.java 1085 -> 1086
--- java/branches/hps-java_HPSJAVA-88/tracking/src/main/java/org/hps/recon/tracking/ShaperLinearFitAlgorithm.java	2014-09-25 00:09:11 UTC (rev 1085)
+++ java/branches/hps-java_HPSJAVA-88/tracking/src/main/java/org/hps/recon/tracking/ShaperLinearFitAlgorithm.java	2014-09-25 00:36:13 UTC (rev 1086)
@@ -7,6 +7,7 @@
 import java.util.logging.Level;
 import java.util.logging.LogManager;
 import java.util.logging.Logger;
+
 import org.apache.commons.math3.linear.Array2DRowRealMatrix;
 import org.apache.commons.math3.linear.ArrayRealVector;
 import org.apache.commons.math3.linear.CholeskyDecomposition;
@@ -19,10 +20,13 @@
 import org.freehep.math.minuit.FunctionMinimum;
 import org.freehep.math.minuit.MnSimplex;
 import org.freehep.math.minuit.MnUserParameters;
-import org.hps.conditions.deprecated.HPSSVTCalibrationConstants.ChannelConstants;
-import org.hps.conditions.deprecated.HPSSVTConstants;
+//===> import org.hps.conditions.deprecated.HPSSVTCalibrationConstants.ChannelConstants;
+
+import org.lcsim.detector.tracker.silicon.HpsSiSensor;
 import org.lcsim.event.RawTrackerHit;
 
+import org.hps.conditions.deprecated.HPSSVTConstants;
+
 /**
  * Fast fitter; currently only fits single hits. Uses Tp from ChannelConstants;
  * fits values and errors for T0 and amplitude.
@@ -34,13 +38,15 @@
     private final int nPulses;
     final double[] amplitudes;
     final double[] amplitudeErrors;
-    private ChannelConstants channelConstants;
+    //===> private ChannelConstants channelConstants;
+    HpsSiSensor sensor = null;
     private final double[] sigma = new double[HPSSVTConstants.TOTAL_NUMBER_OF_SAMPLES];
     private final double[] y = new double[HPSSVTConstants.TOTAL_NUMBER_OF_SAMPLES];
     private int firstUsedSample;
     private int nUsedSamples;
     private int firstFittedPulse;
     private int nFittedPulses;
+    private int channel; 
     private boolean debug = false;
     private static final Logger minuitLoggger = Logger.getLogger("org.freehep.math.minuit");
 
@@ -61,17 +67,27 @@
     }
 
     @Override
-    public Collection<ShapeFitParameters> fitShape(RawTrackerHit rth, ChannelConstants constants) {
-        return this.fitShape(rth.getADCValues(), constants);
+    //===> public Collection<ShapeFitParameters> fitShape(RawTrackerHit rth, ChannelConstants constants) {
+    public Collection<ShapeFitParameters> fitShape(RawTrackerHit rth) {
+        short[] samples = rth.getADCValues();
+        HpsSiSensor sensor =(HpsSiSensor) rth.getDetectorElement();
+        int channel = rth.getIdentifierFieldValue("strip");
+        return fitShape(channel, samples, sensor);
+        //===> return this.fitShape(rth.getADCValues(), constants);
     }
 
-    public Collection<ShapeFitParameters> fitShape(short[] samples, ChannelConstants constants) {
-        channelConstants = constants;
+    public Collection<ShapeFitParameters> fitShape(int channelNumber, short[] samples, HpsSiSensor siSensor) {
+    //===> public Collection<ShapeFitParameters> fitShape(short[] samples, ChannelConstants constants) {
+        // channelConstants = constants;
+    	this.sensor = siSensor;
+    	this.channel = channelNumber;
         double[] signal = new double[HPSSVTConstants.TOTAL_NUMBER_OF_SAMPLES];
 
         for (int i = 0; i < samples.length; i++) {
-            signal[i] = samples[i] - constants.getPedestal();
-            sigma[i] = constants.getNoise();
+            //===> signal[i] = samples[i] - constants.getPedestal();
+            signal[i] = samples[i] - sensor.getPedestal(channel, i);
+            //===> sigma[i] = constants.getNoise();
+            sigma[i] = sensor.getNoise(channel, i);
         }
 
 //        if (signal[0]>300.0) {
@@ -155,7 +171,8 @@
 
                 //subtract first pulse from fit input
                 for (int i = 0; i < samples.length; i++) {
-                    fitData[i] -= amplitudes[firstFittedPulse] * getAmplitude(HPSSVTConstants.SAMPLING_INTERVAL * i - frontFit.userState().value(0), channelConstants);
+                    //===> fitData[i] -= amplitudes[firstFittedPulse] * getAmplitude(HPSSVTConstants.SAMPLING_INTERVAL * i - frontFit.userState().value(0), channelConstants);
+                    fitData[i] -= amplitudes[firstFittedPulse] * getAmplitude(HPSSVTConstants.SAMPLING_INTERVAL * i - frontFit.userState().value(0), this.channel, this.sensor);
                 }
 
                 if (debug) {
@@ -298,7 +315,8 @@
 
         for (int j = 0; j < nUsedSamples; j++) {
             for (int i = 0; i < nFittedPulses; i++) {
-                sc_mat.setEntry(i, j, getAmplitude(HPSSVTConstants.SAMPLING_INTERVAL * (firstUsedSample + j) - times[i], channelConstants) / sigma[firstUsedSample + j]);
+                //===> sc_mat.setEntry(i, j, getAmplitude(HPSSVTConstants.SAMPLING_INTERVAL * (firstUsedSample + j) - times[i], channelConstants) / sigma[firstUsedSample + j]);
+                sc_mat.setEntry(i, j, getAmplitude(HPSSVTConstants.SAMPLING_INTERVAL * (firstUsedSample + j) - times[i], this.channel, this.sensor) / sigma[firstUsedSample + j]);
             }
             y_vec.setEntry(j, y[firstUsedSample + j] / sigma[firstUsedSample + j]);
             var_vec.setEntry(j, sigma[firstUsedSample + j] * sigma[firstUsedSample + j]);
@@ -334,11 +352,14 @@
         return chisq;
     }
 
-    private static double getAmplitude(double time, ChannelConstants channelConstants) {
+    //===> private static double getAmplitude(double time, ChannelConstants channelConstants) {
+    private static double getAmplitude(double time, int channel, HpsSiSensor sensor) {
         if (time < 0) {
             return 0;
         }
-        return (time / channelConstants.getTp()) * Math.exp(1 - time / channelConstants.getTp());
+        double tp = sensor.getShapeFitParameters(channel)[HpsSiSensor.TP_INDEX];
+        //===> return (time / channelConstants.getTp()) * Math.exp(1 - time / channelConstants.getTp());
+        return (time / tp) * Math.exp(1 - time / tp);
     }
 
     @Override

java/branches/hps-java_HPSJAVA-88/tracking/src/main/java/org/hps/recon/tracking
ShaperPileupFitAlgorithm.java 1085 -> 1086
--- java/branches/hps-java_HPSJAVA-88/tracking/src/main/java/org/hps/recon/tracking/ShaperPileupFitAlgorithm.java	2014-09-25 00:09:11 UTC (rev 1085)
+++ java/branches/hps-java_HPSJAVA-88/tracking/src/main/java/org/hps/recon/tracking/ShaperPileupFitAlgorithm.java	2014-09-25 00:36:13 UTC (rev 1086)
@@ -1,13 +1,12 @@
 package org.hps.recon.tracking;
 
 import java.util.Collection;
-import org.hps.conditions.deprecated.HPSSVTCalibrationConstants;
+//===> import org.hps.conditions.deprecated.HPSSVTCalibrationConstants;
 import org.lcsim.event.RawTrackerHit;
 
 /**
  *
  * @author Sho Uemura <[log in to unmask]>
- * @version $Id: $
  */
 public class ShaperPileupFitAlgorithm implements ShaperFitAlgorithm {
 
@@ -26,13 +25,16 @@
         refitThreshold = threshold;
     }
 
-    public Collection<ShapeFitParameters> fitShape(RawTrackerHit rth, HPSSVTCalibrationConstants.ChannelConstants constants) {
-        Collection<ShapeFitParameters> fittedPulses = onePulseFitter.fitShape(rth, constants);
+    //===> public Collection<ShapeFitParameters> fitShape(RawTrackerHit rth, HPSSVTCalibrationConstants.ChannelConstants constants) {
+    public Collection<ShapeFitParameters> fitShape(RawTrackerHit rth) {
+        //===> Collection<ShapeFitParameters> fittedPulses = onePulseFitter.fitShape(rth, constants);
+        Collection<ShapeFitParameters> fittedPulses = onePulseFitter.fitShape(rth);
         double singlePulseChiProb = fittedPulses.iterator().next().getChiProb();
         totalFits++;
         if (singlePulseChiProb < refitThreshold) {
             refitAttempts++;
-            Collection<ShapeFitParameters> doublePulse = twoPulseFitter.fitShape(rth, constants);
+            //===> Collection<ShapeFitParameters> doublePulse = twoPulseFitter.fitShape(rth, constants);
+            Collection<ShapeFitParameters> doublePulse = twoPulseFitter.fitShape(rth);
             double doublePulseChiProb = doublePulse.iterator().next().getChiProb();
             if (doublePulseChiProb > singlePulseChiProb) {
                 refitsAccepted++;

java/branches/hps-java_HPSJAVA-88/users/src/main/java/org/hps/users/omoreno
SvtPerformance.java 1085 -> 1086
--- java/branches/hps-java_HPSJAVA-88/users/src/main/java/org/hps/users/omoreno/SvtPerformance.java	2014-09-25 00:09:11 UTC (rev 1085)
+++ java/branches/hps-java_HPSJAVA-88/users/src/main/java/org/hps/users/omoreno/SvtPerformance.java	2014-09-25 00:36:13 UTC (rev 1086)
@@ -381,7 +381,7 @@
                         }
 
                         constants = HPSSVTCalibrationConstants.getChannelConstants(sensor, channel);
-                        for (ShapeFitParameters fit : shaperFitter.fitShape(rawHit, constants)) {
+                        for (ShapeFitParameters fit : shaperFitter.fitShape(rawHit)) {
                             if (fit.getAmp() > maxClusterAmplitude) {
                                 maxClusterChannel = channel;
                                 maxClusterAmplitude = fit.getAmp();
SVNspam 0.1