Author: [log in to unmask]
Date: Thu Jul 7 15:02:31 2016
New Revision: 4418
Log:
Change definition of signal to noise. No longer display plots while running. Move calculation of signal to noise to its own method.
Modified:
java/trunk/users/src/main/java/org/hps/users/omoreno/SvtClusterAnalysis.java
Modified: java/trunk/users/src/main/java/org/hps/users/omoreno/SvtClusterAnalysis.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/omoreno/SvtClusterAnalysis.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/omoreno/SvtClusterAnalysis.java Thu Jul 7 15:02:31 2016
@@ -9,16 +9,14 @@
import hep.aida.IAnalysisFactory;
import hep.aida.IHistogram2D;
import hep.aida.IHistogramFactory;
-import hep.aida.IPlotterFactory;
-import hep.aida.IPlotter;
import hep.aida.IHistogram1D;
-import hep.aida.IPlotterStyle;
import hep.aida.ITree;
import hep.aida.ref.rootwriter.RootFileStore;
import org.lcsim.util.Driver;
import org.lcsim.geometry.Detector;
import org.lcsim.detector.tracker.silicon.HpsSiSensor;
+import org.lcsim.detector.tracker.silicon.SiSensor;
import org.lcsim.event.EventHeader;
import org.lcsim.event.LCRelation;
import org.lcsim.event.RawTrackerHit;
@@ -27,53 +25,50 @@
import org.lcsim.event.Track;
import org.lcsim.event.TrackerHit;
import org.lcsim.event.base.BaseRelationalTable;
+
import org.hps.recon.tracking.FittedRawTrackerHit;
import org.hps.recon.tracking.TrackUtils;
/**
- *
- * @author Omar Moreno
- *
+ * Analysis driver used to study SVT strip clusters.
+ *
+ * @author <a href="mailto:[log in to unmask]">Omar Moreno</a>
*/
public class SvtClusterAnalysis extends Driver {
-
-
- // Use JFreeChart as the default plotting backend
- static {
- hep.aida.jfree.AnalysisFactory.register();
- }
private List<HpsSiSensor> sensors;
private Map<RawTrackerHit, LCRelation> fittedRawTrackerHitMap = new HashMap<RawTrackerHit, LCRelation>();
private Map<Track, ReconstructedParticle> reconParticleMap = new HashMap<Track, ReconstructedParticle>();
// Plotting
- ITree tree;
- IHistogramFactory histogramFactory;
- IPlotterFactory plotterFactory = IAnalysisFactory.create().createPlotterFactory();
- protected Map<String, IPlotter> plotters = new HashMap<String, IPlotter>();
-
- // All clusters
- private Map<String, IHistogram1D> clusterChargePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram1D> singleHitClusterChargePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram1D> multHitClusterChargePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram1D> signalToNoisePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram1D> singleHitSignalToNoisePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram1D> multHitSignalToNoisePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram1D> clusterSizePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram1D> clusterTimePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram2D> clusterChargeVsTimePlots = new HashMap<String, IHistogram2D>();
-
- // Clusters on track
- private Map<String, IHistogram1D> trackClusterChargePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram1D> trackHitSignalToNoisePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram1D> trackClusterTimePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram2D> trackClusterChargeVsMomentum = new HashMap<String, IHistogram2D>();
- private Map<String, IHistogram2D> trackClusterChargeVsCosTheta = new HashMap<String, IHistogram2D>();
- private Map<String, IHistogram2D> trackClusterChargeVsSinPhi = new HashMap<String, IHistogram2D>();
+ private ITree tree = null;
+ private IHistogramFactory histogramFactory = null;
+
+ //----------------//
+ // Histograms //
+ //----------------//
+
+ // Histograms of all clusters in an event
+ private Map<SiSensor, IHistogram1D> clusterChargePlots = new HashMap<SiSensor, IHistogram1D>();
+ private Map<SiSensor, IHistogram1D> singleHitClusterChargePlots = new HashMap<SiSensor, IHistogram1D>();
+ private Map<SiSensor, IHistogram1D> multHitClusterChargePlots = new HashMap<SiSensor, IHistogram1D>();
+ private Map<SiSensor, IHistogram1D> signalToNoisePlots = new HashMap<SiSensor, IHistogram1D>();
+ private Map<SiSensor, IHistogram1D> singleHitSignalToNoisePlots = new HashMap<SiSensor, IHistogram1D>();
+ private Map<SiSensor, IHistogram1D> multHitSignalToNoisePlots = new HashMap<SiSensor, IHistogram1D>();
+ private Map<SiSensor, IHistogram1D> clusterSizePlots = new HashMap<SiSensor, IHistogram1D>();
+ private Map<SiSensor, IHistogram1D> clusterTimePlots = new HashMap<SiSensor, IHistogram1D>();
+ private Map<SiSensor, IHistogram2D> clusterChargeVsTimePlots = new HashMap<SiSensor, IHistogram2D>();
+
+ // Histograms of clusters associated with a track
+ private Map<SiSensor, IHistogram1D> trackClusterChargePlots = new HashMap<SiSensor, IHistogram1D>();
+ private Map<SiSensor, IHistogram1D> trackHitSignalToNoisePlots = new HashMap<SiSensor, IHistogram1D>();
+ private Map<SiSensor, IHistogram1D> trackClusterTimePlots = new HashMap<SiSensor, IHistogram1D>();
+ private Map<SiSensor, IHistogram2D> trackClusterChargeVsMomentum = new HashMap<SiSensor, IHistogram2D>();
+ private Map<SiSensor, IHistogram2D> trackClusterChargeVsCosTheta = new HashMap<SiSensor, IHistogram2D>();
+ private Map<SiSensor, IHistogram2D> trackClusterChargeVsSinPhi = new HashMap<SiSensor, IHistogram2D>();
// Detector name
- private static final String SUBDETECTOR_NAME = "Tracker";
+ private String subdetectorName = "Tracker";
// Collections
private String clusterCollectionName = "StripClusterer_SiTrackerHitStrip1D";
@@ -84,38 +79,21 @@
private int runNumber = -1;
+ //-------------//
+ // Setters //
+ //-------------//
/**
- * Default Ctor
+ * Set the name of the sub-detector from which sensors will be retrieved.
+ *
+ * @param subdetectorName Name of the sub-detector of interest.
*/
+ public void setSubdetectorName(String subdetectorName) {
+ this.subdetectorName = subdetectorName;
+ }
+
+ /** Default Constructor */
public SvtClusterAnalysis() { }
-
- private int computePlotterRegion(HpsSiSensor sensor) {
-
- if (sensor.getLayerNumber() < 7) {
- if (sensor.isTopLayer()) {
- return 6*(sensor.getLayerNumber() - 1);
- } else {
- return 6*(sensor.getLayerNumber() - 1) + 1;
- }
- } else {
-
- if (sensor.isTopLayer()) {
- if (sensor.getSide() == HpsSiSensor.POSITRON_SIDE) {
- return 6*(sensor.getLayerNumber() - 7) + 2;
- } else {
- return 6*(sensor.getLayerNumber() - 7) + 3;
- }
- } else if (sensor.isBottomLayer()) {
- if (sensor.getSide() == HpsSiSensor.POSITRON_SIDE) {
- return 6*(sensor.getLayerNumber() - 7) + 4;
- } else {
- return 6*(sensor.getLayerNumber() - 7) + 5;
- }
- }
- }
- return -1;
- }
protected void detectorChanged(Detector detector) {
@@ -123,7 +101,7 @@
histogramFactory = IAnalysisFactory.create().createHistogramFactory(tree);
// Get the HpsSiSensor objects from the tracker detector element
- sensors = detector.getSubdetector(SUBDETECTOR_NAME)
+ sensors = detector.getSubdetector(subdetectorName)
.getDetectorElement().findDescendants(HpsSiSensor.class);
// If the detector element had no sensors associated with it, throw
@@ -131,126 +109,55 @@
if (sensors.size() == 0) {
throw new RuntimeException("No sensors were found in this detector.");
}
-
- plotters.put("Cluster Amplitude", plotterFactory.create("Cluster Amplitude"));
- plotters.get("Cluster Amplitude").createRegions(6, 6);
-
- plotters.put("Signal to Noise", plotterFactory.create("Signal to Noise"));
- plotters.get("Signal to Noise").createRegions(6, 6);
-
- plotters.put("Cluster Multiplicity", plotterFactory.create("Cluster Multiplicity"));
- plotters.get("Cluster Multiplicity").createRegions(6, 6);
-
- plotters.put("Cluster Time", plotterFactory.create("Cluster Time"));
- plotters.get("Cluster Time").createRegions(6, 6);
-
- plotters.put("Cluster Amplitude vs Cluster Time", plotterFactory.create("Cluster Amplitude vs Cluster Time"));
- plotters.get("Cluster Amplitude vs Cluster Time").createRegions(6, 6);
-
- plotters.put("Cluster Amplitude vs Momentum", plotterFactory.create("Cluster Amplitude vs Momentum"));
- plotters.get("Cluster Amplitude vs Momentum").createRegions(6, 6);
-
- plotters.put("Cluster Amplitude vs cos(theta)", plotterFactory.create("Cluster Amplitude vs cos(theta)"));
- plotters.get("Cluster Amplitude vs cos(theta)").createRegions(6, 6);
-
- plotters.put("Cluster Amplitude vs sin(phi0)", plotterFactory.create("Cluster Amplitude vs sin(phi0)"));
- plotters.get("Cluster Amplitude vs sin(phi0)").createRegions(6, 6);
-
+
for (HpsSiSensor sensor : sensors) {
-
- clusterChargePlots.put(sensor.getName(),
- histogramFactory.createHistogram1D(sensor.getName() + " - Cluster Charge", 100, 0, 5000));
- plotters.get("Cluster Amplitude").region(this.computePlotterRegion(sensor))
- .plot(clusterChargePlots
- .get(sensor.getName()), this.createStyle(1, "Cluster Amplitude [ADC Counts]", ""));
-
- singleHitClusterChargePlots.put(sensor.getName(),
- histogramFactory.createHistogram1D(sensor.getName() + " - Single Hit Cluster Charge", 100, 0, 5000));
- plotters.get("Cluster Amplitude").region(this.computePlotterRegion(sensor))
- .plot(singleHitClusterChargePlots
- .get(sensor.getName()), this.createStyle(2, "Cluster Amplitude [ADC Counts]", ""));
-
- multHitClusterChargePlots.put(sensor.getName(),
- histogramFactory.createHistogram1D(sensor.getName() + " - Multiple Hit Cluster Charge", 100, 0, 5000));
- plotters.get("Cluster Amplitude").region(this.computePlotterRegion(sensor))
- .plot(multHitClusterChargePlots
- .get(sensor.getName()), this.createStyle(2, "Cluster Amplitude [ADC Counts]", ""));
-
- signalToNoisePlots.put(sensor.getName(),
- histogramFactory.createHistogram1D(sensor.getName() + " - Signal to Noise", 50, 0, 50));
- plotters.get("Signal to Noise").region(this.computePlotterRegion(sensor))
- .plot(signalToNoisePlots
- .get(sensor.getName()), this.createStyle(1, "Signal to Noise", ""));
-
- singleHitSignalToNoisePlots.put(sensor.getName(),
- histogramFactory.createHistogram1D(sensor.getName() + " - Single Hit Signal to Noise", 50, 0, 50));
- plotters.get("Signal to Noise").region(this.computePlotterRegion(sensor))
- .plot(singleHitSignalToNoisePlots
- .get(sensor.getName()), this.createStyle(2, "Signal to Noise", ""));
-
- multHitSignalToNoisePlots.put(sensor.getName(),
- histogramFactory.createHistogram1D(sensor.getName() + " - Multiple Hit Signal to Noise", 50, 0, 50));
- plotters.get("Signal to Noise").region(this.computePlotterRegion(sensor))
- .plot(multHitSignalToNoisePlots
- .get(sensor.getName()), this.createStyle(2, "Signal to Noise", ""));
-
- clusterSizePlots.put(sensor.getName(),
- histogramFactory.createHistogram1D(sensor.getName() + " - Cluster Multiplicity", 10, 0, 10));
- plotters.get("Cluster Multiplicity").region(this.computePlotterRegion(sensor))
- .plot(clusterSizePlots
- .get(sensor.getName()), this.createStyle(1, "Cluster Multiplicity", ""));
-
- clusterTimePlots.put(sensor.getName(),
- histogramFactory.createHistogram1D(sensor.getName() + " - Cluster Time", 100, -100, 100));
- plotters.get("Cluster Time").region(this.computePlotterRegion(sensor))
- .plot(clusterTimePlots
- .get(sensor.getName()), this.createStyle(1, "Cluster Time [ns]", ""));
-
- trackClusterTimePlots.put(sensor.getName(),
- histogramFactory.createHistogram1D(sensor.getName() + " - Track Cluster Time", 100, -100, 100));
- plotters.get("Cluster Time").region(this.computePlotterRegion(sensor))
- .plot(trackClusterTimePlots
- .get(sensor.getName()), this.createStyle(3, "Cluster Time [ns]", ""));
-
- clusterChargeVsTimePlots.put(sensor.getName(),
- histogramFactory.createHistogram2D(sensor.getName() + " - Cluster Amplitude vs Time", 100, 0, 5000, 100, -100, 100));
- plotters.get("Cluster Amplitude vs Cluster Time").region(this.computePlotterRegion(sensor))
- .plot(clusterChargeVsTimePlots
- .get(sensor.getName()));
-
- trackClusterChargePlots.put(sensor.getName(),
- histogramFactory.createHistogram1D(sensor.getName() + " - Tracker Cluster Charge", 100, 0, 5000));
- plotters.get("Cluster Amplitude").region(this.computePlotterRegion(sensor))
- .plot(trackClusterChargePlots
- .get(sensor.getName()), this.createStyle(3, "Cluster Amplitude [ADC Counts]", ""));
-
- trackHitSignalToNoisePlots.put(sensor.getName(),
- histogramFactory.createHistogram1D(sensor.getName() + " - Track Signal to Noise", 50, 0, 50));
- plotters.get("Signal to Noise").region(this.computePlotterRegion(sensor))
- .plot(trackHitSignalToNoisePlots
- .get(sensor.getName()), this.createStyle(3, "Signal to Noise", ""));
-
- trackClusterChargeVsMomentum.put(sensor.getName(),
- histogramFactory.createHistogram2D(sensor.getName() + " - Cluster Amplitude vs Momentum", 100, 0, 1.5, 100, 0, 5000));
- plotters.get("Cluster Amplitude vs Momentum").region(this.computePlotterRegion(sensor))
- .plot(trackClusterChargeVsMomentum
- .get(sensor.getName()));
-
- trackClusterChargeVsCosTheta.put(sensor.getName(),
- histogramFactory.createHistogram2D(sensor.getName() + " - Cluster Amplitude vs cos(theta)", 100, -0.1, 0.1, 100, 0, 5000));
- plotters.get("Cluster Amplitude vs cos(theta)").region(this.computePlotterRegion(sensor))
- .plot(trackClusterChargeVsCosTheta
- .get(sensor.getName()));
-
- trackClusterChargeVsSinPhi.put(sensor.getName(),
- histogramFactory.createHistogram2D(sensor.getName() + " - Cluster Amplitude vs sin(phi0)", 100, -0.2, 0.2, 100, 0, 5000));
- plotters.get("Cluster Amplitude vs sin(phi0)").region(this.computePlotterRegion(sensor))
- .plot(trackClusterChargeVsSinPhi
- .get(sensor.getName()));
- }
-
- for (IPlotter plotter : plotters.values()) {
- plotter.show();
+
+ // Get the name of the sensor
+ String sensorName = sensor.getName();
+ clusterChargePlots.put(sensor,
+ histogramFactory.createHistogram1D(sensorName + " - Cluster Charge", 100, 0, 5000));
+
+ singleHitClusterChargePlots.put(sensor,
+ histogramFactory.createHistogram1D(sensorName + " - Single Hit Cluster Charge", 100, 0, 5000));
+
+ multHitClusterChargePlots.put(sensor,
+ histogramFactory.createHistogram1D(sensorName + " - Multiple Hit Cluster Charge", 100, 0, 5000));
+
+ signalToNoisePlots.put(sensor,
+ histogramFactory.createHistogram1D(sensorName + " - Signal to Noise", 50, 0, 50));
+
+ singleHitSignalToNoisePlots.put(sensor,
+ histogramFactory.createHistogram1D(sensorName + " - Single Hit Signal to Noise", 50, 0, 50));
+
+ multHitSignalToNoisePlots.put(sensor,
+ histogramFactory.createHistogram1D(sensorName + " - Multiple Hit Signal to Noise", 50, 0, 50));
+
+ clusterSizePlots.put(sensor,
+ histogramFactory.createHistogram1D(sensorName + " - Cluster Multiplicity", 10, 0, 10));
+
+ clusterTimePlots.put(sensor,
+ histogramFactory.createHistogram1D(sensorName + " - Cluster Time", 100, -100, 100));
+
+ trackClusterTimePlots.put(sensor,
+ histogramFactory.createHistogram1D(sensorName + " - Track Cluster Time", 100, -100, 100));
+
+ clusterChargeVsTimePlots.put(sensor,
+ histogramFactory.createHistogram2D(sensorName + " - Cluster Amplitude vs Time", 100, 0, 5000, 100, -100, 100));
+
+ trackClusterChargePlots.put(sensor,
+ histogramFactory.createHistogram1D(sensorName + " - Tracker Cluster Charge", 100, 0, 5000));
+
+ trackHitSignalToNoisePlots.put(sensor,
+ histogramFactory.createHistogram1D(sensorName + " - Track Signal to Noise", 50, 0, 50));
+
+ trackClusterChargeVsMomentum.put(sensor,
+ histogramFactory.createHistogram2D(sensorName + " - Cluster Amplitude vs Momentum", 100, 0, 1.5, 100, 0, 5000));
+
+ trackClusterChargeVsCosTheta.put(sensor,
+ histogramFactory.createHistogram2D(sensorName + " - Cluster Amplitude vs cos(theta)", 100, -0.1, 0.1, 100, 0, 5000));
+
+ trackClusterChargeVsSinPhi.put(sensor,
+ histogramFactory.createHistogram2D(sensorName + " - Cluster Amplitude vs sin(phi0)", 100, -0.2, 0.2, 100, 0, 5000));
}
}
@@ -280,47 +187,22 @@
// Get the sensor associated with this cluster
HpsSiSensor sensor = (HpsSiSensor) ((RawTrackerHit) cluster.getRawHits().get(0)).getDetectorElement();
- // Get the raw hits composing this cluster and use them to calculate the amplitude of the hit
- double amplitudeSum = 0;
- double noise = 0;
- for (Object rawHitObject : cluster.getRawHits()) {
-
- RawTrackerHit rawHit = (RawTrackerHit) rawHitObject;
-
- // Get the channel of the raw hit
- int channel = rawHit.getIdentifierFieldValue("strip");
-
- // Add the amplitude of that channel to the total amplitude
- double amplitude = FittedRawTrackerHit.getAmp(this.getFittedHit(rawHit));
- amplitudeSum += FittedRawTrackerHit.getAmp(this.getFittedHit(rawHit));
-
- // Calculate the mean noise for the channel
- double channelNoise = 0;
- for (int sampleN = 0; sampleN < 6; sampleN++) {
- channelNoise += sensor.getNoise(channel, sampleN);
- }
- channelNoise = channelNoise/6;
-
- noise += channelNoise * amplitude;
- }
-
+ Cluster clusterObject = this.calculateSignalToNoise(cluster.getRawHits());
+
clusterSizePlots.get(sensor.getName()).fill(cluster.getRawHits().size());
- // Calculate the signal weighted noise
- noise = noise/amplitudeSum;
-
// Fill all plots
- clusterChargePlots.get(sensor.getName()).fill(amplitudeSum);
- signalToNoisePlots.get(sensor.getName()).fill(amplitudeSum/noise);
+ clusterChargePlots.get(sensor.getName()).fill(clusterObject.getAmplitude());
+ signalToNoisePlots.get(sensor.getName()).fill(clusterObject.getSignalToNoise());
clusterTimePlots.get(sensor.getName()).fill(cluster.getTime());
- clusterChargeVsTimePlots.get(sensor.getName()).fill(amplitudeSum, cluster.getTime());
+ clusterChargeVsTimePlots.get(sensor.getName()).fill(clusterObject.getAmplitude(), cluster.getTime());
if (cluster.getRawHits().size() == 1) {
- singleHitClusterChargePlots.get(sensor.getName()).fill(amplitudeSum);
- singleHitSignalToNoisePlots.get(sensor.getName()).fill(amplitudeSum/noise);
+ singleHitClusterChargePlots.get(sensor.getName()).fill(clusterObject.getAmplitude());
+ singleHitSignalToNoisePlots.get(sensor.getName()).fill(clusterObject.getSignalToNoise());
} else {
- multHitClusterChargePlots.get(sensor.getName()).fill(amplitudeSum);
- multHitSignalToNoisePlots.get(sensor.getName()).fill(amplitudeSum/noise);
+ multHitClusterChargePlots.get(sensor.getName()).fill(clusterObject.getAmplitude());
+ multHitSignalToNoisePlots.get(sensor.getName()).fill(clusterObject.getSignalToNoise());
}
}
@@ -367,44 +249,18 @@
for (TrackerHit trackCluster : trackClusters) {
- // Get the raw hits composing this cluster and use them to calculate the amplitude of the hit
- double amplitudeSum = 0;
- double noise = 0;
- HpsSiSensor sensor = null;
-
- for (Object rawHitObject : trackCluster.getRawHits()) {
- RawTrackerHit rawHit = (RawTrackerHit) rawHitObject;
-
- sensor = (HpsSiSensor) rawHit.getDetectorElement();
-
- // Get the channel of the raw hit
- int channel = rawHit.getIdentifierFieldValue("strip");
-
- // Add the amplitude of that channel to the total amplitude
- double amplitude = FittedRawTrackerHit.getAmp(this.getFittedHit(rawHit));
- amplitudeSum += FittedRawTrackerHit.getAmp(this.getFittedHit(rawHit));
-
- // Calculate the mean noise for the channel
- double channelNoise = 0;
- for (int sampleN = 0; sampleN < 6; sampleN++) {
- channelNoise += sensor.getNoise(channel, sampleN);
- }
- channelNoise = channelNoise/6;
-
- noise += channelNoise * amplitude;
-
- }
-
- // Calculate the signal weighted noise
- noise = noise/amplitudeSum;
+ // Get the sensor associated with this cluster
+ HpsSiSensor sensor = (HpsSiSensor) ((RawTrackerHit) trackCluster.getRawHits().get(0)).getDetectorElement();
+
+ Cluster clusterObject = this.calculateSignalToNoise(trackCluster.getRawHits());
// Fill all plots
- trackClusterChargePlots.get(sensor.getName()).fill(amplitudeSum);
- trackHitSignalToNoisePlots.get(sensor.getName()).fill(amplitudeSum/noise);
- trackClusterChargeVsMomentum.get(sensor.getName()).fill(p, amplitudeSum);
- trackClusterChargeVsCosTheta.get(sensor.getName()).fill(TrackUtils.getCosTheta(track), amplitudeSum);
- trackClusterChargeVsSinPhi.get(sensor.getName()).fill(Math.sin(TrackUtils.getPhi0(track)), amplitudeSum);
- //trackClusterTimePlots.get(sensor.getName()).fill(trackCluster.time());
+ trackClusterChargePlots.get(sensor.getName()).fill(clusterObject.getAmplitude());
+ trackHitSignalToNoisePlots.get(sensor.getName()).fill(clusterObject.getSignalToNoise());
+ trackClusterChargeVsMomentum.get(sensor.getName()).fill(p, clusterObject.getAmplitude());
+ trackClusterChargeVsCosTheta.get(sensor.getName()).fill(TrackUtils.getCosTheta(track), clusterObject.getAmplitude());
+ trackClusterChargeVsSinPhi.get(sensor.getName()).fill(Math.sin(TrackUtils.getPhi0(track)), clusterObject.getAmplitude());
+ trackClusterTimePlots.get(sensor.getName()).fill(trackCluster.getTime());
}
}
}
@@ -425,6 +281,45 @@
}
+ private Cluster calculateSignalToNoise(List<Object> rawHitObjects) {
+
+ double amplitudeSum = 0;
+ double noiseSquared = 0;
+
+ // Get the sensor associated with this cluster
+ HpsSiSensor sensor = (HpsSiSensor) ((RawTrackerHit) rawHitObjects.get(0)).getDetectorElement();
+
+ // Loop over all of the RawTrackerHits associated with this object and
+ // calculate the signal to noise.
+ for (Object rawHitObject : rawHitObjects) {
+
+ // Cast the raw hit object to a RawTrackerHit
+ RawTrackerHit rawHit = (RawTrackerHit) rawHitObject;
+
+ // Get the channel of the raw hit
+ int channel = rawHit.getIdentifierFieldValue("strip");
+
+
+ // Add the amplitude of that channel to the total amplitude
+ amplitudeSum += FittedRawTrackerHit.getAmp(this.getFittedHit(rawHit));
+
+ // Calculate the mean noise for the channel
+ double channelNoise = 0;
+ for (int sampleN = 0; sampleN < 6; sampleN++) {
+ channelNoise += sensor.getNoise(channel, sampleN);
+ }
+ channelNoise = channelNoise/6;
+
+ noiseSquared += channelNoise*channelNoise;
+
+ }
+
+ // Calculate the cluster noise
+ double noise = Math.sqrt(noiseSquared/rawHitObjects.size());
+
+ return new Cluster(amplitudeSum, noise);
+ }
+
/**
* Method that creates a map between a fitted raw hit and it's corresponding raw fit
*
@@ -466,48 +361,32 @@
return reconParticleMap.get(track);
}
- IPlotterStyle createStyle(int color, String xAxisTitle, String yAxisTitle) {
-
- // Create a default style
- IPlotterStyle style = this.plotterFactory.createPlotterStyle();
-
- // Set the style of the X axis
- style.xAxisStyle().setLabel(xAxisTitle);
- style.xAxisStyle().labelStyle().setFontSize(14);
- style.xAxisStyle().setVisible(true);
-
- // Set the style of the Y axis
- style.yAxisStyle().setLabel(yAxisTitle);
- style.yAxisStyle().labelStyle().setFontSize(14);
- style.yAxisStyle().setVisible(true);
-
- // Turn off the histogram grid
- style.gridStyle().setVisible(false);
-
- // Set the style of the data
- style.dataStyle().lineStyle().setVisible(false);
- style.dataStyle().outlineStyle().setVisible(false);
- style.dataStyle().outlineStyle().setThickness(4);
- style.dataStyle().fillStyle().setVisible(true);
-
- if (color == 1) {
- style.dataStyle().fillStyle().setColor("31, 137, 229, 1");
- style.dataStyle().outlineStyle().setColor("31, 137, 229, 1");
- style.dataStyle().fillStyle().setOpacity(.30);
- } else if (color == 2) {
- style.dataStyle().fillStyle().setColor("93, 228, 47, 1");
- style.dataStyle().outlineStyle().setColor("93, 228, 47, 1");
- style.dataStyle().fillStyle().setOpacity(.70);
- } else if (color == 3) {
- style.dataStyle().fillStyle().setColor("255, 38, 38, 1");
- style.dataStyle().outlineStyle().setColor("255, 38, 38, 1");
- style.dataStyle().fillStyle().setOpacity(.70);
- }
- style.dataStyle().errorBarStyle().setVisible(false);
-
- // Turn off the legend
- style.legendBoxStyle().setVisible(false);
-
- return style;
+ /**
+ *
+ * @author omoreno
+ *
+ */
+ private class Cluster {
+
+ private double amplitude;
+ private double noise;
+
+ /** Default Constructor */
+ public Cluster(double amplitude, double noise) {
+ this.amplitude = amplitude;
+ this.noise = noise;
+ }
+
+ public double getAmplitude() {
+ return this.amplitude;
+ }
+
+ public double getNoise() {
+ return this.noise;
+ }
+
+ public double getSignalToNoise() {
+ return this.getAmplitude()/this.getNoise();
+ }
}
}
|