lcsim-contrib/src/main/java/org/lcsim/contrib/onoprien/crux/cheat
diff -u -r1.6 -r1.7
--- CheatTrackFinderDriver.java 13 Feb 2009 20:02:18 -0000 1.6
+++ CheatTrackFinderDriver.java 23 Feb 2009 03:44:17 -0000 1.7
@@ -1,14 +1,17 @@
package org.lcsim.contrib.onoprien.crux.cheat;
import java.util.*;
+import java.util.logging.Level;
import hep.physics.vec.Hep3Vector;
import org.lcsim.event.EventHeader;
import org.lcsim.event.MCParticle;
import org.lcsim.event.SimTrackerHit;
+import org.lcsim.util.aida.AIDA;
import org.lcsim.contrib.onoprien.util.NoSuchParameterException;
import org.lcsim.contrib.onoprien.util.ConstHep3Vector;
+import org.lcsim.contrib.onoprien.util.constants.Particles;
import org.lcsim.contrib.onoprien.util.job.Driver;
import org.lcsim.contrib.onoprien.util.job.JobEvent;
import org.lcsim.contrib.onoprien.util.job.JobEventListener;
@@ -20,15 +23,29 @@
import org.lcsim.contrib.onoprien.vsegment.mctruth.MCTruthVS;
import org.lcsim.contrib.onoprien.crux.infrastructure.*;
+import org.lcsim.contrib.onoprien.crux.infrastructure.ITrack.Point;
/**
* Driver that uses MC truth info to produce a list of tracks.
*
* @author D. Onoprienko
- * @version $Id: CheatTrackFinderDriver.java,v 1.6 2009/02/13 20:02:18 onoprien Exp $
+ * @version $Id: CheatTrackFinderDriver.java,v 1.7 2009/02/23 03:44:17 onoprien Exp $
*/
public class CheatTrackFinderDriver extends Driver implements JobEventListener {
-
+
+// -- Private parts : ---------------------------------------------------------
+
+ private ArrayList<String> _hitMapNames;
+ private String _trackListName;
+
+ private IRecoDefinition _def;
+
+ private MCTruthVS _mcTruth;
+ private BField _bField;
+
+ private HashMap<MCParticle,List<ITrackerHit>> _mc2hit;
+
+
// -- Constructors and initialization : ---------------------------------------
public CheatTrackFinderDriver() {
@@ -102,7 +119,9 @@
public void process(EventHeader event) {
super.process(event);
-
+
+ //_aida.clearAll();
+
// Initialize event-specific data
_mcTruth = (MCTruthVS) event.get(MCTruthVS.KEY);
@@ -123,7 +142,11 @@
for (MCParticle mc : mcList) {
if (_def.isFindable(RecType.TRACK, mc)) {
CruxTrack track = makeTrack(mc);
- trackList.add(track);
+ if (track == null) {
+ log("Failed to create track for findable MCParticle "+ mc.getType().getName() +" with energy "+ mc.getEnergy(), Level.INFO);
+ } else {
+ trackList.add(track);
+ }
}
}
@@ -133,22 +156,29 @@
_mcTruth = null;
_mc2hit = null;
_def.endEvent();
+
+ for (ITrack track : trackList) {
+ Helix helix = track.getTrajectory(Point.START);
+ ArrayList<Hep3Vector> pList = new ArrayList<Hep3Vector>();
+ for (double s=0; s<5000.; s+=10.) {
+ pList.add(helix.getPosition(s));
+ }
+ event.put(track.getMCParticle().getType().getName(), pList);
+ }
+
+
}
// -- Helper methods : --------------------------------------------------------
- /**
- * Create <tt>CruxTrack</tt> object for the given <tt>MCParticle</tt>, and set its parameters.
- * Default implementation only sets <tt>MCParticle</tt> associated with the track -
- * subclasses can override.
- */
private CruxTrack makeTrack(MCParticle mcParticle) {
// Get hits produced by MCParticle
List<ITrackerHit> hits = _mc2hit.get(mcParticle);
+ if (hits == null) hits = Collections.emptyList();
// Wrap hits into anchors :
@@ -174,35 +204,36 @@
nodes.add(startNode);
// Create node at last hit position :
-
- SimTrackerHit simHit = _mcTruth.getSimTrackerHits(hits.get(hits.size()-1)).get(0);
- pos = new ConstHep3Vector(simHit.getPoint());
- momentum = new ConstHep3Vector(simHit.getMomentum());
- helix = _bField.makeHelix(pos, momentum, charge);
- helix.setReferencePoint(ConstHep3Vector.V000);
- CruxTrackNode lastHitNode = new CruxTrackNode(helix);
-
- nodes.add(lastHitNode);
+
+ CruxTrackNode lastHitNode = null;
+ if (! hits.isEmpty()) {
+ SimTrackerHit simHit = _mcTruth.getSimTrackerHits(hits.get(hits.size() - 1)).get(0);
+ pos = new ConstHep3Vector(simHit.getPoint());
+ momentum = new ConstHep3Vector(simHit.getMomentum());
+ helix = _bField.makeHelix(pos, momentum, charge);
+ helix.setReferencePoint(ConstHep3Vector.V000);
+ lastHitNode = new CruxTrackNode(helix);
+ nodes.add(lastHitNode);
+ }
// Create track
CruxTrack track = new CruxTrack(anchors, nodes, charge);
track.setMCParticle(mcParticle);
track.setFunctionalPoint(ITrack.Point.START, startNode, 0.);
- track.setFunctionalPoint(ITrack.Point.LAST_HIT, lastHitNode, 0.);
-
+ track.setFunctionalPoint(ITrack.Point.LAST_HIT, (lastHitNode == null) ? startNode : lastHitNode , 0.);
+
+// System.out.println("");
+// System.out.println(mcParticle.getType().getName() +" energy "+ mcParticle.getEnergy()+" momentum "+ mcParticle.getMomentum().magnitude());
+// System.out.println("Origin"+ mcParticle.getOrigin() +" Momentum "+ mcParticle.getMomentum());
+// System.out.println("");
+// helix = track.getTrajectory(Point.START);
+// System.out.println("Track helix "+ helix);
+// System.out.println("Track origin "+ track.getPosition(Point.START) +" Momentum "+ track.getMomentum(Point.START));
+// System.out.println("Track charge "+ track.getCharge());
+// System.out.println("Track pars "+ helix.getParameters(Helix.CRep.class));
+
return track;
}
-
-// -- Private parts : ---------------------------------------------------------
-
- private ArrayList<String> _hitMapNames;
- private String _trackListName;
- private IRecoDefinition _def;
-
- private MCTruthVS _mcTruth;
- private BField _bField;
-
- private HashMap<MCParticle,List<ITrackerHit>> _mc2hit;
}
lcsim-contrib/src/main/java/org/lcsim/contrib/onoprien/crux/cheat
diff -u -r1.2 -r1.3
--- RecoDefinitionCrux.java 18 Feb 2009 03:29:06 -0000 1.2
+++ RecoDefinitionCrux.java 23 Feb 2009 03:44:17 -0000 1.3
@@ -9,6 +9,7 @@
import org.lcsim.contrib.onoprien.util.NoSuchParameterException;
import org.lcsim.contrib.onoprien.util.WeightedTable;
+import org.lcsim.contrib.onoprien.util.constants.Particles;
import org.lcsim.contrib.onoprien.util.job.JobManager;
import org.lcsim.contrib.onoprien.vsegment.geom.SegmentationManager;
@@ -30,7 +31,7 @@
* <tt>endEvent()</tt> to clean it up once the event is processed.
*
* @author D. Onoprienko
- * @version $Id: RecoDefinitionCrux.java,v 1.2 2009/02/18 03:29:06 onoprien Exp $
+ * @version $Id: RecoDefinitionCrux.java,v 1.3 2009/02/23 03:44:17 onoprien Exp $
*/
public class RecoDefinitionCrux extends RecoDefinition {
@@ -199,7 +200,6 @@
cutSet.cut_MinTrackerSuperLayers > getNumTrackerSuperLayers(mcParticle)) return false;
// Passed all cuts !
-
return true;
}
@@ -258,19 +258,22 @@
sd = sd1;
layer = layer1;
ITrackerHit.Type hitType;
+ boolean isBarrel;
if (ob instanceof ITrackerHit) {
ITrackerHit hit = (ITrackerHit) ob;
hitType = hit.getType();
+ isBarrel = hit.getBarrelEndcapFlag().isBarrel();
} else {
SimTrackerHit hit = (SimTrackerHit) ob;
List<Sensor> sensors = segMan.getSensor(hit);
+ isBarrel = hit.getSubdetector().isBarrel();
if (sensors.isEmpty()) {
hitType = ITrackerHit.Type.UNKNOWN;
} else {
hitType = sensors.get(0).getType().getHitType();
}
}
- if (hitType.nUnmeasured() == 0) {
+ if (hitType.nUnmeasured() == 0 || isBarrel) {
nLayers += 2;
} else {
nLayers += 1;