1
2
3
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
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
109
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 }