lcsim-contrib/src/main/java/org/lcsim/contrib/Partridge/TrackingTest
diff -N SeedTrackerDiagnostics.java
--- SeedTrackerDiagnostics.java 10 Dec 2008 22:03:06 -0000 1.1.1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,249 +0,0 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-
-package org.lcsim.contrib.Partridge.TrackingTest;
-
-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.recon.tracking.seedtracker.diagnostic.EmptySeedTrackerDiagnostics;
-import org.lcsim.recon.tracking.seedtracker.diagnostic.FindableTracks;
-import org.lcsim.recon.tracking.seedtracker.diagnostic.ISeedTrackerDiagnostics;
-import org.lcsim.recon.tracking.seedtracker.diagnostic.SeedValidator;
-import org.lcsim.event.MCParticle;
-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;
-
-/**
- *
- * @author cozzy
- */
-public class SeedTrackerDiagnostics extends EmptySeedTrackerDiagnostics implements ISeedTrackerDiagnostics{
-
- AIDA aida = AIDA.defaultInstance();
-
- private double purity_cutoff = 0.0;
- private String prefix = "";
- private boolean debugOut = true;
-
- public SeedTrackerDiagnostics(){
-
- }
-
- /**
- * Generates diagnostic plots given a list of seed candidates and a strategy.
- * @param seedlist
- * @param strategy
- */
- @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);
- }
- }
- }
-
- @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());
- }
-
- @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());
- }
- return;
- }
-
- @Override
- public void fireConfirmerExtenderFitNoSuccess(Task task, SeedCandidate Seed, HelicalTrackHit hit, HelixFitter fitter, boolean optimize) {
- if (debugOut) System.out.println("Circlechissq" + fitter.getCircleFit().chisq());
- }
-
- @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());
- }
- }
-
- @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);
- }
-
- }
-
-
- //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 strat){
-
- FindableTracks findable = new FindableTracks(strat, 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);
- }
-
- }
-
-
- 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;
- }
-
- 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