lcsim/src/org/lcsim/contrib/seedtracker/example
diff -u -r1.1 -r1.2
--- AnalysisDriver.java 17 Jun 2008 00:39:16 -0000 1.1
+++ AnalysisDriver.java 22 Jun 2008 23:20:23 -0000 1.2
@@ -8,11 +8,16 @@
package org.lcsim.contrib.seedtracker.example;
import hep.aida.IHistogram1D;
+import hep.physics.vec.Hep3Vector;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
+import org.lcsim.constants.Constants;
+import org.lcsim.contrib.seedtracker.SeedTrack;
+import org.lcsim.contrib.seedtracker.SeedCandidate;
+import org.lcsim.fit.helicaltrack.HelicalTrackFit;
import org.lcsim.event.TrackerHit;
import org.lcsim.fit.helicaltrack.HelicalTrackHit;
import org.lcsim.event.EventHeader;
@@ -49,26 +54,53 @@
for (Track track : tracklist) {
List<TrackerHit> hitlist = track.getTrackerHits();
Map<MCParticle, Integer> mcmap = new HashMap<MCParticle, Integer>();
- for (TrackerHit hit : hitlist) {
- List<MCParticle> mclist = ((HelicalTrackHit) 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);
+ if (track instanceof SeedTrack) {
+ SeedCandidate seed = ((SeedTrack) track).getSeedCandidate();
+ for (HelicalTrackHit hit : seed.getHits()) {
+ double x = hit.getCorrectedPosition().x();
+ double y = hit.getCorrectedPosition().y();
+ HelicalTrackFit helix = seed.getHelix();
+ MCParticle particle = hit.getMCParticles().get(0);
+ Hep3Vector p = particle.getMomentum();
+ double phi = Math.atan2(p.y(), p.x());
+ double R = Math.sqrt(p.x()*p.x() + p.y()*p.y()) / (5. * Constants.fieldConversion);
+ double RS = R;
+ if (particle.getCharge() < 0.) RS = -1. * RS;
+ Hep3Vector start = particle.getOrigin();
+ double xc = start.x() + RS * Math.sin(phi);
+ double yc = start.y() - RS * Math.cos(phi);
+// double xc = helix.xc();
+// double yc = helix.yc();
+// double R = Math.abs(helix.R());
+ double RHit = Math.sqrt((x-xc)*(x-xc) + (y-yc)*(y-yc));
+ double drphi_ms = 0.;
+ if (helix.ScatterMap().containsKey(hit)) drphi_ms = helix.ScatterMap().get(hit).drphi();
+ double drphi_res = hit.drphi();
+ double drphi = Math.sqrt(drphi_ms*drphi_ms + drphi_res*drphi_res);
+ aida.cloud1D("r-phi residual for layer "+hit.getLayerIdentifier()).fill(RHit-R);
+ aida.cloud1D("Pull for layer "+hit.getLayerIdentifier()).fill((RHit - R)/drphi);
+ aida.cloud1D("Hit resolution for layer "+hit.getLayerIdentifier()).fill(drphi_res);
+ aida.cloud2D("Hit MS resolution for layer "+hit.getLayerIdentifier()).fill(drphi_ms, helix.pT(5.));
+ 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();
+ 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);
}
- 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();
@@ -94,8 +126,17 @@
h1.fill(pt,wgt);
aida.histogram1D("MC pT", 100, 0., 50.).fill(pt);
}
+ if (!trkmap.containsKey(mcp)) {
+ List<HelicalTrackHit> hits = event.get(HelicalTrackHit.class, "HelicalTrackHits");
+ if (hits.size() > 6) {
+ System.out.println("Failed to find track. Found "+hits.size()+" hits @ theta = "
+ +180.*Math.acos(mcp.getMomentum().z() / mcp.getMomentum().magnitude())/Math.PI);
+ for (HelicalTrackHit hit : hits) {
+ System.out.println("Hit in "+hit.getLayerIdentifier()+" at x= "+hit.x()+" y= "+hit.y()+" z= "+hit.z());
+ }
+ }
+ }
}
return;
}
-
-}
+}
\ No newline at end of file
lcsim/src/org/lcsim/contrib/seedtracker/example
diff -u -r1.1 -r1.2
--- MyStrategy.java 17 Jun 2008 00:39:16 -0000 1.1
+++ MyStrategy.java 22 Jun 2008 23:20:23 -0000 1.2
@@ -155,13 +155,94 @@
lyrlist7.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Seed));
SeedStrategy outsideinendcap7 = new SeedStrategy("OutsideInEndcap7",lyrlist7);
_strategylist.add(outsideinendcap7);
+
+ // Create an inside out for the forward region
+ List<SeedLayer> lyrlist8 = new ArrayList<SeedLayer>();
+ lyrlist8.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+ lyrlist8.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+ lyrlist8.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Seed));
+ lyrlist8.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Seed));
+ lyrlist8.add(new SeedLayer("VertexEndcap",2,endcap,SeedType.Seed));
+ lyrlist8.add(new SeedLayer("VertexEndcap",3,endcap,SeedType.Confirm));
+ lyrlist8.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Extend));
+ lyrlist8.add(new SeedLayer("TrackerForward",1,endcap,SeedType.Extend));
+ lyrlist8.add(new SeedLayer("TrackerForward",2,endcap,SeedType.Extend));
+ lyrlist8.add(new SeedLayer("TrackerEndcap",2,endcap,SeedType.Extend));
+ lyrlist8.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Extend));
+ SeedStrategy outsideinendcap8 = new SeedStrategy("InsideOutEndcap1",lyrlist8);
+ _strategylist.add(outsideinendcap8);
+
+ // Create an inside out for the forward region
+ List<SeedLayer> lyrlist9 = new ArrayList<SeedLayer>();
+ lyrlist9.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+ lyrlist9.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+ lyrlist9.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Seed));
+ lyrlist9.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Seed));
+ lyrlist9.add(new SeedLayer("VertexEndcap",2,endcap,SeedType.Seed));
+ lyrlist9.add(new SeedLayer("VertexEndcap",3,endcap,SeedType.Extend));
+ lyrlist9.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Confirm));
+ lyrlist9.add(new SeedLayer("TrackerForward",1,endcap,SeedType.Extend));
+ lyrlist9.add(new SeedLayer("TrackerForward",2,endcap,SeedType.Extend));
+ lyrlist9.add(new SeedLayer("TrackerEndcap",2,endcap,SeedType.Extend));
+ lyrlist9.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Extend));
+ SeedStrategy outsideinendcap9 = new SeedStrategy("InsideOutEndcap2",lyrlist9);
+ _strategylist.add(outsideinendcap9);
+
+ // Create an inside out for the forward region
+ List<SeedLayer> lyrlist10 = new ArrayList<SeedLayer>();
+ lyrlist10.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Seed));
+ lyrlist10.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Seed));
+ lyrlist10.add(new SeedLayer("VertexBarrel",2,barrel,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("VertexBarrel",3,barrel,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("VertexBarrel",4,barrel,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("TrackerBarrel",0,barrel,SeedType.Seed));
+ lyrlist10.add(new SeedLayer("TrackerBarrel",1,barrel,SeedType.Confirm));
+ lyrlist10.add(new SeedLayer("TrackerBarrel",2,barrel,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("TrackerBarrel",3,barrel,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("TrackerBarrel",4,barrel,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("VertexEndcap",2,endcap,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("VertexEndcap",3,endcap,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("TrackerForward",1,endcap,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("TrackerForward",2,endcap,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("TrackerEndcap",2,endcap,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Extend));
+ SeedStrategy outsideinendcap10 = new SeedStrategy("InsideOutEndcap3",lyrlist10);
+ _strategylist.add(outsideinendcap10);
+
+ // Create an inside out for the forward region
+ List<SeedLayer> lyrlist11 = new ArrayList<SeedLayer>();
+ lyrlist11.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("VertexBarrel",2,barrel,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("VertexBarrel",3,barrel,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("VertexBarrel",4,barrel,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("TrackerBarrel",0,barrel,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("TrackerBarrel",1,barrel,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("TrackerBarrel",2,barrel,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("TrackerBarrel",3,barrel,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("TrackerBarrel",4,barrel,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Seed));
+ lyrlist11.add(new SeedLayer("VertexEndcap",2,endcap,SeedType.Seed));
+ lyrlist11.add(new SeedLayer("VertexEndcap",3,endcap,SeedType.Seed));
+ lyrlist11.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Confirm));
+ lyrlist11.add(new SeedLayer("TrackerForward",1,endcap,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("TrackerForward",2,endcap,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("TrackerEndcap",2,endcap,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Extend));
+ SeedStrategy outsideinendcap11 = new SeedStrategy("InsideOutEndcap4",lyrlist11);
+ _strategylist.add(outsideinendcap11);
+
}
for (SeedStrategy strategy : _strategylist) {
// Set parameters for this strategy
strategy.putMinPT(1.0); // Set minimum pT at 1 GeV
- strategy.putMaxDCA(1.0); // Set maximum d0 at 1 mm
- strategy.putMaxZ0(1.0); // Set maximum z0 at 1 mm
+ strategy.putMaxDCA(10.0); // Set maximum d0 at 1 mm
+ strategy.putMaxZ0(10.0); // Set maximum z0 at 1 mm
strategy.putMinConfirm(1); // Require at least 1 confirm hit
strategy.putMinHits(7); // Require at least 7 total hits
strategy.putMaxChisq(50.); // Set maximum chi^2 at 50