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