View Javadoc

1   /*
2    * To change this template, choose Tools | Templates
3    * and open the template in the editor.
4    */
5   
6   package org.lcsim.recon.tracking.seedtracker.diagnostic;
7   
8   import org.lcsim.event.MCParticle;
9   import org.lcsim.fit.helicaltrack.HelicalTrackFitter;
10  import org.lcsim.fit.helicaltrack.HelicalTrackHit;
11  import org.lcsim.recon.tracking.seedtracker.SeedCandidate;
12  import org.lcsim.recon.tracking.seedtracker.SeedStrategy;
13  import org.lcsim.util.aida.AIDA;
14  
15  /**
16   *
17   * @author cozzy
18   */
19  public class SeedTrackerDiagnostics extends EmptySeedTrackerDiagnostics implements ISeedTrackerDiagnostics{
20  
21      AIDA aida = AIDA.defaultInstance();     
22      private String prefix = ""; 
23      
24      public SeedTrackerDiagnostics(){
25      }
26  
27      @Override
28      public void fireCheckHitPairFailed(HelicalTrackHit hit1, HelicalTrackHit hit2) {
29          for (MCParticle mcp : hit1.getMCParticles()) {
30              if (hit2.getMCParticles().contains(mcp)) {
31                  System.out.println("Hits from same MC particle failed hit pair check");
32                  System.out.println("MC momentum: "+mcp.getMomentum().toString());
33                  System.out.println("Hit 1 position: "+hit1.getCorrectedPosition().toString());
34                  System.out.println("Hit 2 position: "+hit2.getCorrectedPosition().toString());
35              }
36          }
37      }
38  
39      @Override
40      public void fireCheckHitTripletFailed(HelicalTrackHit hit1, HelicalTrackHit hit2, HelicalTrackHit hit3) {
41          for (MCParticle mcp : hit1.getMCParticles()) {
42              if (hit2.getMCParticles().contains(mcp)) {
43                  if (hit3.getMCParticles().contains(mcp)) {
44                      System.out.println("Hits from same MC particle failed hit triplet check");
45                      System.out.println("MC momentum: "+mcp.getMomentum().toString());
46                      System.out.println("Hit 1 position: "+hit1.getCorrectedPosition().toString());
47                      System.out.println("Hit 2 position: "+hit2.getCorrectedPosition().toString());
48                      System.out.println("Hit 3 position: "+hit3.getCorrectedPosition().toString());
49                 }
50              }
51          }
52      }
53  
54  
55      @Override
56      public void fireCheckHitFailed(HelicalTrackHit hit, SeedCandidate seed) {
57          if (seed.isTrueSeed()) {
58              printmsg(seed, "True seed failed hit and seed check");
59              System.out.println("Hit position: "+hit.getCorrectedPosition().toString());
60              for (HelicalTrackHit ihit : seed.getHits()) {
61                  System.out.println("Seed hit position: "+ihit.getCorrectedPosition().toString());
62              }
63          }
64      }
65  
66      @Override
67      public void fireHelixFitFailed(SeedCandidate seed, HelicalTrackFitter.FitStatus status, boolean firstfit) {
68          if (firstfit) printmsg(seed, "Initial fit of true seed failed");
69          else printmsg(seed, "Helix fit of true seed failed with "+seed.getHits().size()+" hits");
70      }
71  
72      @Override
73      public void fireFailedChisqCut(SeedCandidate seed) {
74          printmsg(seed, "True seed failed chisq cut - chisq = "+seed.getHelix().chisqtot());
75      }
76  
77      @Override
78      public void fireMergeKillingNewSeed(SeedCandidate seed, SeedCandidate newseed) {
79           if (!seed.isTrueSeed() && newseed.isTrueSeed())
80              printmsg(seed, "Merge keeping false seed instead of new true seed");
81           if (seed.isTrueSeed() && newseed.isTrueSeed()) {
82               if (newseed.getHits().size() > seed.getHits().size()) {
83                   printmsg(seed, "Merge killing new true seed with more hits than old true seed");
84                   System.out.println("New seed has "+newseed.getHits().size()
85                           +" hits, old seed has "+seed.getHits().size()+" hits");
86                   System.out.println("New seed has chisq = "+newseed.getHelix().chisqtot()+
87                           ", old seed has chisq = "+seed.getHelix().chisqtot());
88               }
89           }
90      }
91  
92      @Override
93      public void fireMergeKillingOldSeed(SeedCandidate seed, SeedCandidate newseed) {
94          if (seed.isTrueSeed() && !newseed.isTrueSeed())
95              printmsg(seed, "Merge eliminating true seed duplicate in favor of false seed");
96           if (seed.isTrueSeed() && newseed.isTrueSeed()) {
97               if (newseed.getHits().size() < seed.getHits().size()) {
98                   printmsg(seed, "Merge killing old true seed with more hits than new true seed");
99                   System.out.println("New seed has "+newseed.getHits().size()
100                          +" hits, old seed has "+seed.getHits().size()+" hits");
101                  System.out.println("New seed has chisq = "+newseed.getHelix().chisqtot()+
102                          ", old seed has chisq = "+seed.getHelix().chisqtot());
103              }
104          }
105     }
106 
107     /**
108      * Sets the prefix to be appended to the beginning of each plot (for example, a strategy name
109      * @param str the new prefix
110      */
111     public void setPrefix(String str){
112         this.prefix = str; 
113     }
114     
115     @Override
116     public void fireStrategyChanged(SeedStrategy strategy) {
117         setPrefix("chisq cut = "+strategy.getMaxChisq()+"/");
118         super.fireStrategyChanged(strategy);
119     }
120 
121     private void printmsg(SeedCandidate seed, String message) {
122         if (!seed.isTrueSeed()) return;
123         for (MCParticle mcp : seed.getMCParticles()) {
124             System.out.println(message+" p: "+mcp.getMomentum().toString());
125         }
126     }
127 }