lcsim/src/org/lcsim/contrib/seedtracker/analysis
diff -N HistogramAnalysisDriver.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ HistogramAnalysisDriver.java 15 Aug 2008 22:25:56 -0000 1.1
@@ -0,0 +1,144 @@
+/*
+ * AnalysisDriver.java
+ *
+ * Created on February 11, 2008, 11:47 AM
+ *
+ */
+
+package org.lcsim.contrib.seedtracker.analysis;
+
+
+import org.lcsim.contrib.seedtracker.analysis.TrackHitHistograms;
+import org.lcsim.contrib.seedtracker.analysis.HelixParamHistograms;
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+
+import org.lcsim.contrib.seedtracker.SeedTrack;
+import org.lcsim.contrib.seedtracker.SeedCandidate;
+import org.lcsim.contrib.seedtracker.analysis.AnalysisUtils;
+import org.lcsim.contrib.seedtracker.analysis.EfficiencyHistograms;
+import org.lcsim.fit.helicaltrack.HelicalTrackFit;
+import org.lcsim.fit.helicaltrack.HelicalTrackHit;
+import org.lcsim.contrib.seedtracker.analysis.HelixParamCalculator;
+import org.lcsim.contrib.seedtracker.analysis.PurityHistograms;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.Track;
+import org.lcsim.event.MCParticle;
+import org.lcsim.util.aida.AIDA;
+import org.lcsim.util.Driver;
+
+
+/**
+ *
+ * @author Richard Partridge
+ * @version 1.0
+ */
+public class HistogramAnalysisDriver extends Driver {
+ private AIDA aida = AIDA.defaultInstance();
+ private double b=0,c=0,d=0;
+ /** Creates a new instance of AnalysisDriver */
+ public HistogramAnalysisDriver() {
+
+ }
+
+ /**
+ * Process the current event
+ * @param event EventHeader for this event
+ */
+ PurityHistograms draw3 = new PurityHistograms();
+ EfficiencyHistograms draw4 = new EfficiencyHistograms();
+ public void process(EventHeader event){
+
+
+ List<Track> tracklist = event.getTracks();
+ Map<MCParticle, Track> trkmap = new HashMap<MCParticle, Track>();
+
+ for (Track track : tracklist) {
+ Map<MCParticle, Integer> mcmap = new HashMap<MCParticle, Integer>();
+ if (track instanceof SeedTrack) {
+ SeedCandidate seed = ((SeedTrack) track).getSeedCandidate();
+ for (HelicalTrackHit hit : seed.getHits()) {
+
+
+
+
+ List<MCParticle> mclist = hit.getMCParticles();
+ for (MCParticle mcp : mclist) {
+ if (mcmap.containsKey(mcp)) {
+ int entries = mcmap.get(mcp) + 1;
+ mcmap.put(mcp, entries);
+ } else
+ mcmap.put(mcp, 1);
+ }
+ }
+ MCParticle mcmatch = null;
+ int nmatch = 0;
+ for (Map.Entry<MCParticle, Integer> me : mcmap.entrySet()) {
+ if (me.getValue() > nmatch) {
+ nmatch = me.getValue();
+ mcmatch = me.getKey();
+ }
+ }
+ if (trkmap.containsKey(mcmatch)) System.out.println("more than one track associated with an MCParticle!!");
+ else trkmap.put(mcmatch, track);
+ }
+ }
+ List<MCParticle> mclist = event.getMCParticles();
+
+ for (MCParticle mcp : mclist) {
+ if (mcp.getCharge() == 0) continue;
+ if (mcp.getGeneratorStatus() != mcp.FINAL_STATE) continue;
+
+ if (trkmap.containsKey(mcp)) {
+ Track trk = trkmap.get(mcp);
+ if (trk instanceof SeedTrack) {
+ SeedTrack strk = (SeedTrack) trk;
+ HelicalTrackFit fit = strk.getSeedCandidate().getHelix();
+
+ //Class to draw histrogram
+ HelixParamHistograms draw = new HelixParamHistograms(fit,mcp,event);
+ HelixParamCalculator calc = new HelixParamCalculator(mcp, 5);
+ AnalysisUtils util = new AnalysisUtils();
+
+ //---Helix Parameter Histrograms------------Helix Parameter Histrograms---\\
+ aida.histogram1D("p", 200, 0, 50).fill(calc.getMCMomentum());
+ if(mcp.getCharge()>0)
+ {
+ draw.DrawResidualPositive();
+ draw.DrawPullPositive();
+ }
+ else
+ {
+ draw.DrawResidualNegative();
+ draw.DrawPullNegative();
+ }
+ draw.DrawResidual();
+ draw.DrawPull();
+
+
+ TrackHitHistograms draw2 = new TrackHitHistograms(fit, mcp,event);
+
+ //---MCParticle vs HelicalTrackFit----------------------------MCParticle vs HelicalTrackFit---
+ draw2.drawMCParticlevHelicalTrackHit();
+
+ //---SimTracker vs HelicalTrackFit---------------------------SimTracker vs HelicalTrackFit---
+ draw2.drawSimTrackervHelicalTrack();
+
+ //---Purity---------------------------Purity---
+ draw3.drawPurityHistograms(mcp, trk);
+ double a = util.FindTrackPurity(trk);
+ c++;
+ d += Math.sqrt((a*(1-a))/c);
+ if(a==1)b++;
+
+
+ }
+ }
+ //--Efficiency---------------------------Efficiency---
+ draw4.drawEfficiencyHistograms(mcp,event);
+ }
+ System.out.println((b/c)*100+"+-"+(d/c)*100+"%");
+ }
+}
+