Print

Print


Commit in lcsim/src/org/lcsim/recon/tracking/seedtracker/diagnostic on MAIN
EmptySeedTrackerDiagnostics.java+10-191.1 -> 1.2
ISeedTrackerDiagnostics.java+15-1451.2 -> 1.3
SeedTrackerDiagnostics.java+50-2011.4 -> 1.5
+75-365
3 modified files
Rewrite diagnostics routines to support updated seedtracker diagnostics

lcsim/src/org/lcsim/recon/tracking/seedtracker/diagnostic
EmptySeedTrackerDiagnostics.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- EmptySeedTrackerDiagnostics.java	27 Aug 2008 17:57:46 -0000	1.1
+++ EmptySeedTrackerDiagnostics.java	19 Aug 2009 22:11:32 -0000	1.2
@@ -6,15 +6,11 @@
 package org.lcsim.recon.tracking.seedtracker.diagnostic;
 
 import java.util.List;
-import org.lcsim.recon.tracking.seedtracker.ConfirmerExtender.Task;
-import org.lcsim.recon.tracking.seedtracker.HelixFitter;
+import java.util.Set;
+import org.lcsim.event.MCParticle;
+import org.lcsim.fit.helicaltrack.HelicalTrackFitter;
 import org.lcsim.recon.tracking.seedtracker.SeedCandidate;
-import org.lcsim.fit.circle.CircleFit;
-import org.lcsim.fit.helicaltrack.HelicalTrackFit;
-import org.lcsim.fit.helicaltrack.HelicalTrackFitter.FitStatus;
 import org.lcsim.fit.helicaltrack.HelicalTrackHit;
-import org.lcsim.fit.line.SlopeInterceptLineFit;
-import org.lcsim.fit.zsegment.ZSegmentFit;
 
 /**
  * This is the class you probably want to extend if you want to create your own diagnostics.
@@ -25,17 +21,12 @@
  */
 public class EmptySeedTrackerDiagnostics extends AbstractSeedTrackerDiagnostics implements ISeedTrackerDiagnostics {
 
-    public void fireFinalDiagnostics(List<SeedCandidate> finalSeeds) {return;}
-    public void fireMergeIsBetterDiagnostics(SeedCandidate newSeed, SeedCandidate oldSeed, boolean better) {return;}
-    public void fireMergeIsDuplicateDiagnostics(SeedCandidate newSeed, SeedCandidate oldseed, boolean duplicate) {return;}
-    public void fireMergeStartDiagnostics(List<SeedCandidate> newSeedList) {return;}
-    public void fireFinderDPhiCut(int hitNumber, double dphi, boolean pass, HelicalTrackHit hit) {return;}
-    public void fireFinderDone(int maxseeds, int nseed, int nfit, int nconfirm, List<SeedCandidate> confirmedSeeds) {return;}
-    public void fireFitterFitMade(SeedCandidate seed, HelicalTrackFit hfit, CircleFit cfit, SlopeInterceptLineFit lfit, ZSegmentFit zfit, FitStatus fitStatus, boolean success) {return;}
-    public void fireConfirmerExtenderWorkingSeedInfo(Task task, SeedCandidate seed, List<HelicalTrackHit> hitlist){return;}
-    public void fireConfirmerExtenderFitNoSuccess(Task task, SeedCandidate Seed, HelicalTrackHit hit, HelixFitter fitter, boolean optimize) {return;}
-    public void fireConfirmerExtenderFitSuccess(Task task, SeedCandidate Seed, HelicalTrackHit hit, HelixFitter fitter, double chisqbest, boolean optimize) {return;}
-    public void fireConfirmerExtenderAllHitsPotentiallyBad(Task task, SeedCandidate workingSeed, List<HelicalTrackHit> hitlist, double chisqbest, double oldchisq) {return;}
-    public void fireConfirmerExtenderLayerDone(Task task, int numSeeds, List<SeedCandidate> seedlist) {return;}
+    public void fireCheckHitPairFailed(HelicalTrackHit hit1, HelicalTrackHit hit2, SeedCandidate seed) {return;}
+    public void fireCheckHitFailed(HelicalTrackHit hit, SeedCandidate seed) {return;}
+    public void fireFinderDone(List<SeedCandidate> trkseeds, Set<MCParticle> mcp_seeds) {return;}
+    public void fireFailedChisqCut(SeedCandidate seed) {return;}
+    public void fireHelixFitFailed(SeedCandidate seed, HelicalTrackFitter.FitStatus status, boolean firstfit) {return;}
+    public void fireMergeKillingNewSeed(SeedCandidate seed, SeedCandidate newseed) {return;}
+    public void fireMergeKillingOldSeed(SeedCandidate seed, SeedCandidate newseed) {return;}
 
 }

lcsim/src/org/lcsim/recon/tracking/seedtracker/diagnostic
ISeedTrackerDiagnostics.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- ISeedTrackerDiagnostics.java	27 Aug 2008 18:28:05 -0000	1.2
+++ ISeedTrackerDiagnostics.java	19 Aug 2009 22:11:32 -0000	1.3
@@ -6,15 +6,11 @@
 package org.lcsim.recon.tracking.seedtracker.diagnostic;
 
 import java.util.List;
+import java.util.Set;
 import org.lcsim.event.EventHeader;
-import org.lcsim.fit.circle.CircleFit;
-import org.lcsim.fit.helicaltrack.HelicalTrackFit;
+import org.lcsim.event.MCParticle;
 import org.lcsim.fit.helicaltrack.HelicalTrackFitter;
 import org.lcsim.fit.helicaltrack.HelicalTrackHit;
-import org.lcsim.fit.line.SlopeInterceptLineFit;
-import org.lcsim.fit.zsegment.ZSegmentFit;
-import org.lcsim.recon.tracking.seedtracker.ConfirmerExtender;
-import org.lcsim.recon.tracking.seedtracker.HelixFitter;
 import org.lcsim.recon.tracking.seedtracker.HitManager;
 import org.lcsim.recon.tracking.seedtracker.MaterialManager;
 import org.lcsim.recon.tracking.seedtracker.SeedCandidate;
@@ -25,9 +21,7 @@
  * @author cozzy
  */
 public interface ISeedTrackerDiagnostics {
-    
-
-    
+      
     /**
      * SeedTracker will call this method with the event's bField
      * @param bField the magnetic field, in Teslas 
@@ -57,148 +51,24 @@
      * @param strategy
      */
     public void fireStrategyChanged(SeedStrategy strategy);
-    
-    /**
-     * This is fired after merging with the final track lists. Any purity or efficiency diagnostics should go here. 
-     * This is basically equivalent to extracting the list of tracks from the event. 
-     * 
-     * @param finalSeeds The final list of SeedCanditates determined by this strategy
-     */
-    public void fireFinalDiagnostics(List<SeedCandidate> finalSeeds); 
-    
-    /**
-     * This is fired whenever isBetter() is called in MergeSeedLists. The isBetter() function compares two 
-     * SeedCandidates as follows:
-     * 
-     * <ul>
-     * <li> if newSeed has 2 or more hits than oldSeed, return true;
-     * <li> if newSeed has 1 more hit than oldSeed, return true if the chi-squared
-     * difference is less than the badHitChisq, otherwise false
-     * <li>if newSeed has the same number of hits as oldSeed, return true 
-     * if newSeed's fit has a better chi-squared, otherwise false
-     * <li>if newSeed has 1 hit less than oldSeed, return true if chi-squared 
-     * difference is less than negative badHitChisq, otherwise false
-     * </ul>
-     * 
-     * If returnValue is true, then newSeed should be better than oldSeed according to the strategy. 
-     * This call gives the ability to check the performance of the isBetter algorithm. 
-     * @param newSeed the new seed being compared
-     * @param oldSeed the old seed being compared against
-     * @param better the returnValue of the isBetter() function
-     */
-    public void fireMergeIsBetterDiagnostics(SeedCandidate newSeed, SeedCandidate oldSeed, boolean better);
-    
-    
-    /**
-     * This is fired when isDuplicated is called in MergeSeedLists. The 
-     * isDuplicate() function returns true if it thinks that the two seedCandidates
-     * refer to the same track. 
-     * 
-     * @param newSeed the newSeed being compared
-     * @param oldSeed the oldSeed being compared
-     * @param duplicate the return value of isDuplicate
-     */
-    public void fireMergeIsDuplicateDiagnostics(SeedCandidate newSeed, SeedCandidate olDseed, boolean duplicate);
-    
-    /**
-     * This is fired at the beginning of MergeSeedLists. It passes a list of the
-     * unmerged SeedCandidates (which means that many are likely duplicates). 
-     * 
-     * @param newSeedList the unmerged SeedCandidates
-     */
-    public void fireMergeStartDiagnostics(List<SeedCandidate> newSeedList);
-    
-    
-    /**
-     * This is fired by the finder whenever a dPhi cut is made. 
-     * 
-     * @param hitNumber Either 2 or 3, depending on whether it's the second 
-     * or third hit being added
-     * @param dphi the difference in phi 
-     * @param pass whether or not the hit passes
-     * @param hit the hit in question 
-     */
-    public void fireFinderDPhiCut(int hitNumber, double dphi, boolean pass, HelicalTrackHit hit);
-    
-    /**
-     * This is fired at the end of the finding routine
-     * @param maxseeds 
-     * @param nseed
-     * @param nfit
-     * @param nconfirm
-     * @param confirmedSeeds
-     */
-    public void fireFinderDone(int maxseeds, int nseed, int nfit, int nconfirm, List<SeedCandidate> confirmedSeeds);
 
+    public void fireCheckHitPairFailed(HelicalTrackHit hit1, HelicalTrackHit hit2, SeedCandidate seed);
     
-    /**
-     * This is fired whenever a fit is made. 
-     * @param seed The seed being fitted
-     * @param hfit The helicalTrack fit
-     * @param cfit The circle fit
-     * @param lfit The line fit
-     * @param zfit The ZSegment fit
-     * @param fitStatus The fit status
-     * @param success Whether or not the fit was a success 
-     */
-    
-    public void fireFitterFitMade(SeedCandidate seed, HelicalTrackFit hfit, CircleFit cfit, SlopeInterceptLineFit lfit, ZSegmentFit zfit, HelicalTrackFitter.FitStatus fitStatus, boolean success);
-    
+    public void fireCheckHitFailed(HelicalTrackHit hit, SeedCandidate seed);
 
-    /**
-     * This is fired for each working seed that is being confirmed or extended at the beginning of confirmation / extension
-     * @param task Confirm or Extend
-     * @param seed The working seed 
-     * @param hitlist The list of hits tob be used. 
-     */
-    public void fireConfirmerExtenderWorkingSeedInfo(ConfirmerExtender.Task task, SeedCandidate seed, List<HelicalTrackHit> hitlist);
-    
-    /**
-     * This is fired whenever the fit with a new hit fails
-     * @param task Confirm or extend
-     * @param seed The original working seed before the hit is added
-     * @param hit The hit added 
-     * @param fitter The HelixFitter object
-     * @param optimize Whether the optimize bit is enabled or not
-     
+    public void fireHelixFitFailed(SeedCandidate seed, HelicalTrackFitter.FitStatus status, boolean firstfit);
 
-     */
-    public void fireConfirmerExtenderFitNoSuccess(ConfirmerExtender.Task task, SeedCandidate seed, HelicalTrackHit hit, HelixFitter fitter, boolean optimize);
-    
-    
-    
-    
-     /**
-     * This is fired whenever the fit with a new hit succeeds
-     * @param task Confirm or extend
-     * @param seed The original working seed before the hit is added
-     * @param hit The hit added
-     * @param fitter The HelixFitter object
-     * @param chisqbest The current best chisq 
-     * @param optimize Whether the optimize bit is enabled or not
+    public void fireFailedChisqCut(SeedCandidate seed);
 
-     */
-    public void fireConfirmerExtenderFitSuccess(ConfirmerExtender.Task task, SeedCandidate seed, HelicalTrackHit hit, HelixFitter fitter, double chisqbest, boolean optimize);
-    
-    
-    
-    
-    /**
-     * This is fired when all fit tries for a particular layer are potentially bad hits. 
-     * @param task Confirm or extend
-     * @param workingSeed the current working seed
-     * @param hitlist the list of hits
-     * @param chisqbest the best chisq
-     * @param oldchisq the old chisq
-     */
-    public void fireConfirmerExtenderAllHitsPotentiallyBad(ConfirmerExtender.Task task, SeedCandidate workingSeed, List<HelicalTrackHit> hitlist, double chisqbest, double oldchisq);
-    
+    public void fireMergeKillingNewSeed(SeedCandidate seed, SeedCandidate newseed);
+
+    public void fireMergeKillingOldSeed(SeedCandidate seed, SeedCandidate newseed);
     
     /**
-     * This is fired at the end of confirmation.
-     * @param task Confirm or extend
-     * @param numSeeds the numer of seed confirmed or extended
-     * @param seedlist the final seed list
+     * This is fired at the end of the finding routine
+     * @param trackseeds
+     * @param mcp_seeds
      */
-    public void fireConfirmerExtenderLayerDone(ConfirmerExtender.Task task, int numSeeds, List<SeedCandidate> seedlist); 
+    public void fireFinderDone(List<SeedCandidate> trackseeds, Set<MCParticle> mcp_seeds);
+
 }

lcsim/src/org/lcsim/recon/tracking/seedtracker/diagnostic
SeedTrackerDiagnostics.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- SeedTrackerDiagnostics.java	9 Oct 2008 18:18:51 -0000	1.4
+++ SeedTrackerDiagnostics.java	19 Aug 2009 22:11:33 -0000	1.5
@@ -5,20 +5,8 @@
 
 package org.lcsim.recon.tracking.seedtracker.diagnostic;
 
-import hep.physics.vec.Hep3Vector;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import org.lcsim.recon.tracking.seedtracker.ConfirmerExtender.Task;
-import org.lcsim.event.MCParticle;
-import org.lcsim.fit.helicaltrack.HelicalTrackFit;
+import org.lcsim.fit.helicaltrack.HelicalTrackFitter;
 import org.lcsim.fit.helicaltrack.HelicalTrackHit;
-import org.lcsim.math.chisq.ChisqProb;
-import org.lcsim.recon.tracking.seedtracker.HelixFitter;
 import org.lcsim.recon.tracking.seedtracker.SeedCandidate;
 import org.lcsim.recon.tracking.seedtracker.SeedStrategy;
 import org.lcsim.util.aida.AIDA;
@@ -29,217 +17,78 @@
  */
 public class SeedTrackerDiagnostics extends EmptySeedTrackerDiagnostics implements ISeedTrackerDiagnostics{
 
-    AIDA aida = AIDA.defaultInstance();
-     
-    private double purity_cutoff = 0.0; 
+    AIDA aida = AIDA.defaultInstance();     
     private String prefix = ""; 
-    private boolean debugOut; 
     
     public SeedTrackerDiagnostics(){
-
-    }
-    
-    /**
-     * Generates diagnostic plots given a list of seed candidates and a strategy.
-     * @param seedlist
-     */
-    @Override
-    public void fireFinalDiagnostics(List<SeedCandidate> seedlist){
-        
-        System.out.println(" After merging: "+seedlist.size());
-        Map<SeedCandidate,SeedValidator> vmap = generateValidators(seedlist);
-        makePurityPlots(vmap);        
-        Set<MCParticle> likelyMCs = generateLikelyMCSet(vmap);
-        makeEfficiencyPlots(likelyMCs, currentStrategy);
-    }
-    
-   /**
-    * Sets the purity cutoff for a track's MC to be considered found when 
-    * calculating efficiency. Default is 0.0. 
-    * @param new_purity_cutoff
-    */
-    public void setPurityCutoff(double new_purity_cutoff){
-        purity_cutoff = new_purity_cutoff; 
-    }
-    
-    /**
-     * Sets the prefix to be appended to the beginning of each plot (for example, a strategy name
-     * @param str the new prefix
-     */
-    public void setPrefix(String str){
-        this.prefix = str; 
-    }
-    
-    
-    @Override
-    public void fireStrategyChanged(SeedStrategy strategy) {
-        setPrefix("chisq cut = "+strategy.getMaxChisq()+"/");
-        super.fireStrategyChanged(strategy);
     }
 
-
     @Override
-    public void fireMergeIsBetterDiagnostics(SeedCandidate newSeed, SeedCandidate oldSeed, boolean returnValue) {
-        if (returnValue){
-            
-            SeedValidator oldV = new SeedValidator(oldSeed);
-            SeedValidator newV = new SeedValidator(newSeed);
-
-                if (oldV.getPurity() > newV.getPurity()){
-                     makeBadDecisionPlots(newSeed,oldSeed, oldV,newV);
-                }
-        }
+    public void fireCheckHitPairFailed(HelicalTrackHit hit1, HelicalTrackHit hit2, SeedCandidate seed) {
+        if (seed.isTrueSeed()) System.out.println("True seed failed hit check");
     }
 
     @Override
-    public void fireFinderDone(int maxseeds, int nseed, int nfit, int nconfirm, List<SeedCandidate> confirmedSeeds) {
-        System.out.println("Possible seeds: "+maxseeds);
-        System.out.print(" Trial seeds: "+nseed);
-        System.out.println(" Fitted seeds: "+nfit);
-        System.out.println(" Confirmed seeds: "+nconfirm);
-        System.out.println(" Confirmed seed candidates: "+confirmedSeeds.size());
+    public void fireCheckHitFailed(HelicalTrackHit hit, SeedCandidate seed) {
+        if (seed.isTrueSeed()) System.out.println("True seed failed hit check");
     }
-    
+
     @Override
-    public void fireConfirmerExtenderWorkingSeedInfo(Task task, SeedCandidate seed, List<HelicalTrackHit> hitlist) {
-        if (debugOut) {
-            System.out.println("Oldcirclechisq: "+seed.getHelix().chisq()[0]);
-            System.out.println("Oldchisq: "+seed.getHelix().chisqtot());
-            System.out.println("Oldhits: "+seed.getHits().size());
-            System.out.println("Old Helix: "+seed.getHelix().toString()); 
+    public void fireHelixFitFailed(SeedCandidate seed, HelicalTrackFitter.FitStatus status, boolean firstfit) {
+        if (seed.isTrueSeed()) {
+            if (firstfit) System.out.println("Initial fit of true seed failed");
+            else System.out.println("Helix fit of true seed failed with "+seed.getHits().size()+" hits");
         }
-        return;
     }
 
     @Override
-    public void fireConfirmerExtenderFitNoSuccess(Task task, SeedCandidate Seed, HelicalTrackHit hit, HelixFitter fitter,  boolean optimize) {
-        if (debugOut) System.out.println("Circlechissq" + fitter.getCircleFit().chisq());
+    public void fireFailedChisqCut(SeedCandidate seed) {
+        if (seed.isTrueSeed()) System.out.println("True seed failed chisq cut - chisq = "+seed.getHelix().chisqtot());
     }
 
     @Override
-   public void fireConfirmerExtenderFitSuccess(Task task, SeedCandidate Seed, HelicalTrackHit hit, HelixFitter fitter, double chisqbest, boolean optimize) {
-        if (debugOut) {
-            System.out.println("Good fit");
-            System.out.println("Chisq: "+fitter.getHelix().chisqtot());
-            System.out.println("Circle Chisq: "+fitter.getHelix().chisq()[0]);
-            System.out.println("New Helix: "+fitter.getHelix().toString());
-        }
+    public void fireMergeKillingNewSeed(SeedCandidate seed, SeedCandidate newseed) {
+         if (!seed.isTrueSeed() && newseed.isTrueSeed())
+            System.out.println("Merge keeping false seed instead of new true seed");
+         if (seed.isTrueSeed() && newseed.isTrueSeed()) {
+             if (newseed.getHits().size() > seed.getHits().size()) {
+                 System.out.println("Merge killing new true seed with more hits than old true seed");
+                 System.out.println("New seed has "+newseed.getHits().size()
+                         +" hits, old seed has "+seed.getHits().size()+" hits");
+                 System.out.println("New seed has chisq = "+newseed.getHelix().chisqtot()+
+                         ", old seed has chisq = "+seed.getHelix().chisqtot());
+             }
+         }
     }
 
     @Override
-    public void fireConfirmerExtenderLayerDone(Task task, int numSeeds, List<SeedCandidate> seedlist) {
-        if (debugOut){
-            System.out.println(" "+task.toString()+" seeds: "+numSeeds);
-            System.out.println(" "+task.toString()+" seed candidates: "+seedlist.size());
-        }
-    }
-    
-        private void makeBadDecisionPlots(SeedCandidate newseed, SeedCandidate seed, SeedValidator oldV, SeedValidator newV) {
-
-        aida.cloud1D(prefix+"Bad Decision newseed chisq").fill(newseed.getHelix().chisqtot());
-        aida.cloud1D(prefix+"Bad Decision oldseed chisq").fill(seed.getHelix().chisqtot());
-        aida.cloud2D(prefix+"Bad Decision newseed vs. oldseed chisq").fill(newseed.getHelix().chisqtot(), seed.getHelix().chisqtot());
-        aida.cloud1D(prefix+"Bad Decision old seedpurity").fill(oldV.getPurity());
-        aida.cloud1D(prefix+"Bad Decision new seedpurity").fill(newV.getPurity());
-        
-        
-        if(oldV.getVerdict().isGoodValue()){
-            Hep3Vector p = oldV.getLikelyMC().getMomentum();
-            double pt = Math.sqrt(p.x() * p.x() + p.y() * p.y());
-            aida.cloud1D(prefix+"Bad Decision real particle transverse momentum").fill(pt);
-        
-            Hep3Vector r = oldV.getLikelyMC().getOrigin();
-            double rc = Math.sqrt(r.x()*r.x()+r.y()*r.y()); 
-            aida.cloud1D(prefix + "Bad Decision real particle start radius (cylindrical)").fill(rc);
-        }
-        
+    public void fireMergeKillingOldSeed(SeedCandidate seed, SeedCandidate newseed) {
+        if (seed.isTrueSeed() && !newseed.isTrueSeed())
+            System.out.println("Merge eliminating true seed duplicate in favor of false seed");
+         if (seed.isTrueSeed() && newseed.isTrueSeed()) {
+             if (newseed.getHits().size() < seed.getHits().size()) {
+                 System.out.println("Merge killing old true seed with more hits than new true seed");
+                 System.out.println("New seed has "+newseed.getHits().size()
+                         +" hits, old seed has "+seed.getHits().size()+" hits");
+                 System.out.println("New seed has chisq = "+newseed.getHelix().chisqtot()+
+                         ", old seed has chisq = "+seed.getHelix().chisqtot());
+             }
+         }
     }
 
- 
-    //makes purity plots
-    private void makePurityPlots(Map<SeedCandidate, SeedValidator> vmap) {
-        
-        for (SeedCandidate s : vmap.keySet()) {
-
-            SeedValidator v = vmap.get(s);
-   
-            if (v.getVerdict().isGoodValue()) {
-                aida.cloud1D(prefix+"Good seeds chisq").fill(s.getHelix().chisqtot());
-                aida.cloud1D(prefix+"Good seeds numhits").fill(s.getHits().size());
-                aida.cloud1D(prefix+"Good seeds pt").fill(s.getHelix().pT(5.0));
-            } else {
-                aida.cloud1D(prefix+"Bad seeds chisq").fill(s.getHelix().chisqtot());
-                aida.cloud1D(prefix+"Bad seeds numhits").fill(s.getHits().size());
-                aida.cloud1D(prefix+"Bad seeds pt").fill(s.getHelix().pT(5.0));
-            }
-            
-            aida.cloud1D(prefix+"purity").fill(v.getPurity());
-            aida.cloud2D(prefix+"purity vs. numHits").fill(v.getPurity(), s.getHits().size());
-            aida.cloud2D(prefix+"purity vs. pt").fill(v.getPurity(), s.getHelix().pT(5.0));
-            aida.cloud2D(prefix+"purity vs. cth").fill(v.getPurity(), s.getHelix().cth());
-            aida.cloud2D(prefix+"purity vs. chisq").fill(v.getPurity(), s.getHelix().chisqtot());
-            
-            double chisqdof = ChisqProb.gammq(s.getHelix().chisqtot(), s.getHits().size()-1); 
-            
-            aida.cloud2D(prefix+"purity vs. (1 - chisq_cdf(chisq,ndof)").fill(v.getPurity(), chisqdof);
-            aida.cloud2D(prefix+"purity cs. dca").fill(v.getPurity(), s.getHelix().dca());
-        }
-    }
-    
-    private void makeEfficiencyPlots(Set<MCParticle> likelyMCs, SeedStrategy strategy){
-        
-        FindableTracks findable = new FindableTracks(strategy, hitManager);
-        findable.setBField(bField);
-        
-        List<MCParticle> MCs = new ArrayList<MCParticle>(); 
-        MCs.addAll(event.getMCParticles());
-        
-        Iterator iter = MCs.iterator();
-
-            //remove all none findable MCs
-            while(iter.hasNext()){
-                if(!findable.isFindable((MCParticle)iter.next()))
-                    iter.remove();
-            }
-
-            int numFindable = MCs.size(); 
-            aida.cloud1D(prefix+"Number findable").fill(numFindable);
-
-            
-            // remove all the MC's we've found... this gives us findable - found
-            MCs.removeAll(likelyMCs);
-
-            int numFound = numFindable - MCs.size(); // findable - (findable - found) = found 
-            
-            aida.cloud1D(prefix+"Num found (purity cutoff="+purity_cutoff+") ").fill(numFound);
-            
-            if(numFindable > 0){
-                double eff = (double) numFound / (double) numFindable;
-                aida.cloud1D(prefix+"Efficiency").fill(eff);
-            }
-        
+     
+    /**
+     * Sets the prefix to be appended to the beginning of each plot (for example, a strategy name
+     * @param str the new prefix
+     */
+    public void setPrefix(String str){
+        this.prefix = str; 
     }
     
-    
-    private Map<SeedCandidate,SeedValidator> generateValidators(List<SeedCandidate> seedlist) {
-        
-        Map<SeedCandidate,SeedValidator> ret = new HashMap<SeedCandidate,SeedValidator>(); 
-        for (SeedCandidate s : seedlist) {
-            ret.put(s, new SeedValidator(s));
-        }
-        
-        return ret;
+    @Override
+    public void fireStrategyChanged(SeedStrategy strategy) {
+        setPrefix("chisq cut = "+strategy.getMaxChisq()+"/");
+        super.fireStrategyChanged(strategy);
     }
-    
-    private Set<MCParticle> generateLikelyMCSet(Map<SeedCandidate, SeedValidator> vmap) {
-        
-        Set<MCParticle> set = new HashSet<MCParticle>(); 
-        
-        for (SeedValidator v : vmap.values()) {
-            if(v.getPurity()<purity_cutoff) continue; 
-            set.add(v.getLikelyMC());
-        }
-        return set; 
-    }   
-}
-    
\ No newline at end of file
+
+}
\ No newline at end of file
CVSspam 0.2.8