Author: [log in to unmask]
Date: Mon Jun 22 13:27:11 2015
New Revision: 3179
Log:
Add plots of cluster charge vs momentum/cos(theta)/sin(phi0).
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 Mon Jun 22 13:27:11 2015
@@ -4,6 +4,7 @@
import java.util.List;
import java.util.Map;
import java.util.HashMap;
+import java.util.Set;
import hep.aida.IAnalysisFactory;
import hep.aida.IHistogram2D;
@@ -15,17 +16,19 @@
import hep.aida.ITree;
import hep.aida.ref.rootwriter.RootFileStore;
-import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
import org.lcsim.util.Driver;
-import org.lcsim.fit.helicaltrack.HelicalTrackCross;
-import org.lcsim.fit.helicaltrack.HelicalTrackStrip;
import org.lcsim.geometry.Detector;
import org.lcsim.detector.tracker.silicon.HpsSiSensor;
import org.lcsim.event.EventHeader;
+import org.lcsim.event.LCRelation;
import org.lcsim.event.RawTrackerHit;
+import org.lcsim.event.ReconstructedParticle;
+import org.lcsim.event.RelationalTable;
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;
/**
*
@@ -41,8 +44,8 @@
}
private List<HpsSiSensor> sensors;
- private Map<RawTrackerHit, FittedRawTrackerHit> fittedRawTrackerHitMap
- = new HashMap<RawTrackerHit, FittedRawTrackerHit>();
+ private Map<RawTrackerHit, LCRelation> fittedRawTrackerHitMap = new HashMap<RawTrackerHit, LCRelation>();
+ private Map<Track, ReconstructedParticle> reconParticleMap = new HashMap<Track, ReconstructedParticle>();
// Plotting
ITree tree;
@@ -50,18 +53,24 @@
IPlotterFactory plotterFactory = IAnalysisFactory.create().createPlotterFactory();
protected Map<String, IPlotter> plotters = new HashMap<String, IPlotter>();
- private Map<HpsSiSensor, IHistogram1D> clusterChargePlots = new HashMap<HpsSiSensor, IHistogram1D>();
- private Map<HpsSiSensor, IHistogram1D> singleHitClusterChargePlots = new HashMap<HpsSiSensor, IHistogram1D>();
- private Map<HpsSiSensor, IHistogram1D> multHitClusterChargePlots = new HashMap<HpsSiSensor, IHistogram1D>();
- private Map<HpsSiSensor, IHistogram1D> trackClusterChargePlots = new HashMap<HpsSiSensor, IHistogram1D>();
- private Map<HpsSiSensor, IHistogram1D> signalToNoisePlots = new HashMap<HpsSiSensor, IHistogram1D>();
- private Map<HpsSiSensor, IHistogram1D> singleHitSignalToNoisePlots = new HashMap<HpsSiSensor, IHistogram1D>();
- private Map<HpsSiSensor, IHistogram1D> multHitSignalToNoisePlots = new HashMap<HpsSiSensor, IHistogram1D>();
- private Map<HpsSiSensor, IHistogram1D> trackHitSignalToNoisePlots = new HashMap<HpsSiSensor, IHistogram1D>();
- private Map<HpsSiSensor, IHistogram1D> clusterMultiplicityPlots = new HashMap<HpsSiSensor, IHistogram1D>();
- private Map<HpsSiSensor, IHistogram1D> clusterTimePlots = new HashMap<HpsSiSensor, IHistogram1D>();
- private Map<HpsSiSensor, IHistogram1D> trackClusterTimePlots = new HashMap<HpsSiSensor, IHistogram1D>();
- private Map<HpsSiSensor, IHistogram2D> clusterChargeVsTimePlots = new HashMap<HpsSiSensor, IHistogram2D>();
+ // 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>();
// Detector name
private static final String SUBDETECTOR_NAME = "Tracker";
@@ -69,6 +78,9 @@
// Collections
private String clusterCollectionName = "StripClusterer_SiTrackerHitStrip1D";
private String fittedHitsCollectionName = "SVTFittedRawTrackerHits";
+ private String stereoHitRelationsColName = "HelicalTrackHitRelations";
+ private String rotatedHthRelationsColName = "RotatedHelicalTrackHitRelations";
+ private String fsParticlesCollectionName = "FinalStateParticles";
private int runNumber = -1;
@@ -135,67 +147,106 @@
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,
+ 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), this.createStyle(1, "Cluster Amplitude [ADC Counts]", ""));
-
- singleHitClusterChargePlots.put(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), this.createStyle(2, "Cluster Amplitude [ADC Counts]", ""));
-
- multHitClusterChargePlots.put(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), this.createStyle(2, "Cluster Amplitude [ADC Counts]", ""));
-
- trackClusterChargePlots.put(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), this.createStyle(3, "Cluster Amplitude [ADC Counts]", ""));
-
- signalToNoisePlots.put(sensor,
- histogramFactory.createHistogram1D(sensor.getName() + " - Signal to Noise", 50, 0, 50));
- plotters.get("Signal to Noise").region(this.computePlotterRegion(sensor))
- .plot(signalToNoisePlots.get(sensor), this.createStyle(1, "Signal to Noise", ""));
-
- singleHitSignalToNoisePlots.put(sensor,
- 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), this.createStyle(2, "Signal to Noise", ""));
-
- multHitSignalToNoisePlots.put(sensor,
- 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), this.createStyle(2, "Signal to Noise", ""));
-
- trackHitSignalToNoisePlots.put(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), this.createStyle(3, "Signal to Noise", ""));
-
- clusterMultiplicityPlots.put(sensor,
- histogramFactory.createHistogram1D(sensor.getName() + " - Cluster Multiplicity", 10, 0, 10));
- plotters.get("Cluster Multiplicity").region(this.computePlotterRegion(sensor))
- .plot(clusterMultiplicityPlots.get(sensor), this.createStyle(1, "Cluster Multiplicity", ""));
-
- clusterTimePlots.put(sensor,
- histogramFactory.createHistogram1D(sensor.getName() + " - Cluster Time", 100, -100, 100));
- plotters.get("Cluster Time").region(this.computePlotterRegion(sensor))
- .plot(clusterTimePlots.get(sensor), this.createStyle(1, "Cluster Time [ns]", ""));
-
- trackClusterTimePlots.put(sensor,
- histogramFactory.createHistogram1D(sensor.getName() + " - Track Cluster Time", 100, -100, 100));
- plotters.get("Cluster Time").region(this.computePlotterRegion(sensor))
- .plot(trackClusterTimePlots.get(sensor), this.createStyle(3, "Cluster Time [ns]", ""));
-
- clusterChargeVsTimePlots.put(sensor,
- 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));
+ .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()) {
@@ -203,41 +254,45 @@
}
}
+ @SuppressWarnings({ "unchecked", "rawtypes" })
public void process(EventHeader event) {
if (runNumber == -1) runNumber = event.getRunNumber();
// If the event doesn't contain fitted raw hits, skip it
- if (!event.hasCollection(FittedRawTrackerHit.class, fittedHitsCollectionName)) return;
+ if (!event.hasCollection(LCRelation.class, fittedHitsCollectionName)) return;
// Get the list of fitted hits from the event
- List<FittedRawTrackerHit> fittedHits = event.get(FittedRawTrackerHit.class, fittedHitsCollectionName);
+ List<LCRelation> fittedHits = event.get(LCRelation.class, fittedHitsCollectionName);
// Map the fitted hits to their corresponding raw hits
this.mapFittedRawHits(fittedHits);
// If the event doesn't contain any clusters, skip it
- if (!event.hasCollection(SiTrackerHitStrip1D.class, clusterCollectionName)) return;
+ if (!event.hasCollection(TrackerHit.class, clusterCollectionName)) return;
// Get the list of clusters in the event
- List<SiTrackerHitStrip1D> clusters = event.get(SiTrackerHitStrip1D.class, clusterCollectionName);
+ List<TrackerHit> clusters = event.get(TrackerHit.class, clusterCollectionName);
System.out.println("Number of clusters: " + clusters.size());
- for (SiTrackerHitStrip1D cluster : clusters) {
+ for (TrackerHit cluster : clusters) {
// Get the sensor associated with this cluster
- HpsSiSensor sensor = (HpsSiSensor) cluster.getSensor();
+ 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 amplitude = 0;
+ double amplitudeSum = 0;
double noise = 0;
- for (RawTrackerHit rawHit : cluster.getRawHits()) {
+ 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
- amplitude += this.getFittedHit(rawHit).getAmp();
+ double amplitude = FittedRawTrackerHit.getAmp(this.getFittedHit(rawHit));
+ amplitudeSum += FittedRawTrackerHit.getAmp(this.getFittedHit(rawHit));
// Calculate the mean noise for the channel
double channelNoise = 0;
@@ -246,53 +301,88 @@
}
channelNoise = channelNoise/6;
- noise += channelNoise * this.getFittedHit(rawHit).getAmp();
+ noise += channelNoise * amplitude;
}
- clusterMultiplicityPlots.get(sensor).fill(cluster.getRawHits().size());
+ clusterSizePlots.get(sensor.getName()).fill(cluster.getRawHits().size());
// Calculate the signal weighted noise
- noise = noise/amplitude;
+ noise = noise/amplitudeSum;
// Fill all plots
- clusterChargePlots.get(sensor).fill(amplitude);
- signalToNoisePlots.get(sensor).fill(amplitude/noise);
- clusterTimePlots.get(sensor).fill(cluster.getTime());
- clusterChargeVsTimePlots.get(sensor).fill(amplitude, cluster.getTime());
+ clusterChargePlots.get(sensor.getName()).fill(amplitudeSum);
+ signalToNoisePlots.get(sensor.getName()).fill(amplitudeSum/noise);
+ clusterTimePlots.get(sensor.getName()).fill(cluster.getTime());
+ clusterChargeVsTimePlots.get(sensor.getName()).fill(amplitudeSum, cluster.getTime());
if (cluster.getRawHits().size() == 1) {
- singleHitClusterChargePlots.get(sensor).fill(amplitude);
- singleHitSignalToNoisePlots.get(sensor).fill(amplitude/noise);
+ singleHitClusterChargePlots.get(sensor.getName()).fill(amplitudeSum);
+ singleHitSignalToNoisePlots.get(sensor.getName()).fill(amplitudeSum/noise);
} else {
- multHitClusterChargePlots.get(sensor).fill(amplitude);
- multHitSignalToNoisePlots.get(sensor).fill(amplitude/noise);
+ multHitClusterChargePlots.get(sensor.getName()).fill(amplitudeSum);
+ multHitSignalToNoisePlots.get(sensor.getName()).fill(amplitudeSum/noise);
}
}
-
+
if (!event.hasCollection(Track.class, "MatchedTracks")) return;
List<Track> tracks = event.get(Track.class, "MatchedTracks");
- for (Track track : tracks) {
-
- for (TrackerHit stereoHit : track.getTrackerHits()) {
-
- for (HelicalTrackStrip cluster : ((HelicalTrackCross) stereoHit).getStrips()) {
-
+ // Get the collection of LCRelations between a stereo hit and the strips making it up
+ List<LCRelation> stereoHitRelations = event.get(LCRelation.class, stereoHitRelationsColName);
+ BaseRelationalTable stereoHitToClusters = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
+ for (LCRelation relation : stereoHitRelations) {
+ if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
+ stereoHitToClusters.add(relation.getFrom(), relation.getTo());
+ }
+ }
+
+ // Get the collection of LCRelations relating RotatedHelicalTrackHits to
+ // HelicalTrackHits
+ List<LCRelation> rotatedHthToHthRelations = event.get(LCRelation.class, rotatedHthRelationsColName);
+ BaseRelationalTable hthToRotatedHth = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_ONE, RelationalTable.Weighting.UNWEIGHTED);
+ for (LCRelation relation : rotatedHthToHthRelations) {
+ if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
+ hthToRotatedHth.add(relation.getFrom(), relation.getTo());
+ }
+ }
+
+ // Get the list of final state particles from the event. These will
+ // be used to obtain the track momentum.
+ List<ReconstructedParticle> fsParticles = event.get(ReconstructedParticle.class, fsParticlesCollectionName);
+
+ this.mapReconstructedParticlesToTracks(tracks, fsParticles);
+
+ // Loop over all of the tracks in the event
+ for(Track track : tracks){
+
+ // Calculate the momentum of the track
+ double p = this.getReconstructedParticle(track).getMomentum().magnitude();
+
+ for (TrackerHit rotatedStereoHit : track.getTrackerHits()) {
+
+ // Get the HelicalTrackHit corresponding to the RotatedHelicalTrackHit
+ // associated with a track
+ Set<TrackerHit> trackClusters = stereoHitToClusters.allFrom(hthToRotatedHth.from(rotatedStereoHit));
+
+ for (TrackerHit trackCluster : trackClusters) {
+
// Get the raw hits composing this cluster and use them to calculate the amplitude of the hit
- double amplitude = 0;
+ double amplitudeSum = 0;
double noise = 0;
HpsSiSensor sensor = null;
- for (Object hit : cluster.rawhits()) {
- RawTrackerHit rawHit = (RawTrackerHit) hit;
-
+
+ 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
- amplitude += this.getFittedHit(rawHit).getAmp();
+ double amplitude = FittedRawTrackerHit.getAmp(this.getFittedHit(rawHit));
+ amplitudeSum += FittedRawTrackerHit.getAmp(this.getFittedHit(rawHit));
// Calculate the mean noise for the channel
double channelNoise = 0;
@@ -301,19 +391,23 @@
}
channelNoise = channelNoise/6;
- noise += channelNoise * this.getFittedHit(rawHit).getAmp();
+ noise += channelNoise * amplitude;
+
}
-
+
// Calculate the signal weighted noise
- noise = noise/amplitude;
+ noise = noise/amplitudeSum;
// Fill all plots
- trackClusterChargePlots.get(sensor).fill(amplitude);
- trackHitSignalToNoisePlots.get(sensor).fill(amplitude/noise);
- trackClusterTimePlots.get(sensor).fill(cluster.time());
- }
- }
- }
+ 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());
+ }
+ }
+ }
}
public void endOfData() {
@@ -327,6 +421,8 @@
} catch (IOException e) {
e.printStackTrace();
}
+
+
}
/**
@@ -334,26 +430,42 @@
*
* @param fittedHits : List of fitted hits to map
*/
- private void mapFittedRawHits(List<FittedRawTrackerHit> fittedHits) {
+ private void mapFittedRawHits(List<LCRelation> fittedHits) {
// Clear the fitted raw hit map of old values
fittedRawTrackerHitMap.clear();
// Loop through all fitted hits and map them to their corresponding raw hits
- for (FittedRawTrackerHit fittedHit : fittedHits) {
- fittedRawTrackerHitMap.put(fittedHit.getRawTrackerHit(), fittedHit);
- }
- }
-
+ for (LCRelation fittedHit : fittedHits) {
+ fittedRawTrackerHitMap.put(FittedRawTrackerHit.getRawTrackerHit(fittedHit), fittedHit);
+ }
+ }
+
/**
*
* @param rawHit
* @return
*/
- private FittedRawTrackerHit getFittedHit(RawTrackerHit rawHit) {
+ private LCRelation getFittedHit(RawTrackerHit rawHit) {
return fittedRawTrackerHitMap.get(rawHit);
}
+ private void mapReconstructedParticlesToTracks(List<Track> tracks, List<ReconstructedParticle> particles) {
+
+ reconParticleMap.clear();
+ for (ReconstructedParticle particle : particles) {
+ for (Track track : tracks) {
+ if (!particle.getTracks().isEmpty() && particle.getTracks().get(0) == track) {
+ reconParticleMap.put(track, particle);
+ }
+ }
+ }
+ }
+
+ private ReconstructedParticle getReconstructedParticle(Track track) {
+ return reconParticleMap.get(track);
+ }
+
IPlotterStyle createStyle(int color, String xAxisTitle, String yAxisTitle) {
// Create a default style
|