Commit in lcsim/src/org/lcsim/recon/ztracking/cheater on MAIN
TrackingCheater.java+27-601.4 -> 1.5
Update.

lcsim/src/org/lcsim/recon/ztracking/cheater
TrackingCheater.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- TrackingCheater.java	5 Aug 2005 00:46:53 -0000	1.4
+++ TrackingCheater.java	26 Sep 2005 22:48:16 -0000	1.5
@@ -11,15 +11,12 @@
 import org.lcsim.event.MCParticle;
 import org.lcsim.event.SimTrackerHit;
 import org.lcsim.event.Track;
+import org.lcsim.event.util.MCParticleClassifier;
 
 import org.lcsim.util.Driver;
 import org.lcsim.util.aida.AIDA;
 import org.lcsim.util.loop.LCSimLoop;
 
-//import hep.lcio.event.*;
-//import hep.lcio.implementation.io.LCFactory;
-//import hep.lcio.io.*;
-
 import java.io.File;
 import java.text.DecimalFormat;
 import java.util.ArrayList;
@@ -36,7 +33,9 @@
 public class TrackingCheater extends Driver
 // public class TrackingCheater extends AbstractTracker
 {
+    public static boolean INITIALIZED = false;
     //static int MAXPoints=25000;
+    boolean useFinalStateParticles = true;
 
     int NTracks = 0, NCombinedTracks = 0;
 
@@ -48,26 +47,24 @@
 	System.out.println(text);
 
 	df.setMaximumFractionDigits(2);
+	INITIALIZED = true;
     }
 
     public void process(EventHeader event)
     {
 	nEvt++;
-	if (firstEvents) System.out.println(" Event #"+nEvt);
+	if (firstEvents) System.out.println(" Event #"+nEvt+" (TrackingCheater)");
 	NTracks = NCombinedTracks = 0;
 
-	//if (first) System.out.println(ClassName+"\n"+" Find Tracker tracks");
-	if (first) System.out.println("  Find charged tracks");
-
-	//if (Hist) HistogramFolder.setDefaultFolder("/Tracking/Cheater");
-	boolean hist = true;
+	//if (first) System.out.println(ClassName+"\n"+" Find Tracker tracks.");
+	if (first) System.out.println("  Find charged tracks.");
 
 	// Find tracks in each detector system.
 	List<List<SimTrackerHit>> collections = event.get(SimTrackerHit.class);
 	for (List<SimTrackerHit> collection : collections)
 	{
 	    String name = event.getMetaData(collection).getName();
-	    if (first) System.out.println("   Find "+name+" cheater tracks");
+	    if (first) System.out.println("   Find "+name+" cheater tracks.");
 	    Map<MCParticle,CheatTrack> result = findTracks(collection);
 	    if (result.size() > 0) event.put(name+"Tracks",new ArrayList(result.values()));
 	}
@@ -78,41 +75,6 @@
 	Map<MCParticle, CombinedTrack> combined = findCombinedTracks(trackLists);
 	if (combined.size() > 0) event.put("CombinedTracks",new ArrayList(combined.values()));
 
-	if (hist) {
-	    AIDA aida = AIDA.defaultInstance();
-	    aida.cloud1D("NTracks").fill(NTracks);
-	    aida.cloud1D("NCombined").fill(NCombinedTracks);
-
-	    List<List<CheatTrack>> foundTrackLists = event.get(CheatTrack.class);
-	    for (List<CheatTrack> tracks : foundTrackLists ) {
-		String name = event.getMetaData(tracks).getName();
-		if (name.equals("TkrBarrHitsTracks")) {
-		    if (first) System.out.println("   Plot "+name+" points");
-		    int np = 0;
-		    for (CheatTrack track : tracks) {
-			MCParticle mcP = track.getMCParticle();
-			int nPoints = track.getNPoints(); np+=nPoints;
-			aida.cloud1D("NBarrelPoints").fill(nPoints);
-		    }
-		    if (first) System.out.println("    Plotted "+np+" points on "+tracks.size()+" tracks.");
-		}
-		else if (name.equals("CombinedTracks")) {
-		    if (first) System.out.println("   Plot "+name+" points");
-		    int np=0;
-		    for (CheatTrack track : tracks) {
-			MCParticle mcP = track.getMCParticle();
-			CombinedTrack trk = (CombinedTrack) track;
-			int nPoints = 0;
-			for (int n=0; n<trk.getNTracks(); n++) {
-			    nPoints += trk.getTrack(n).getNPoints(); np+=nPoints;
-			}
-			aida.cloud1D("NTotalPoints").fill(nPoints);
-		    }
-		    if (first) System.out.println("    Plotted "+np+" points on "+tracks.size()+" tracks.");
-		}
-	    }
-	}
-
 	if (first) { first = false; trace = false; }
 	// if (first) { trackList.printTracks(); first = false; trace = false; }
 	if (nEvt>=3) firstEvents = false;
@@ -125,30 +87,36 @@
 	for (SimTrackerHit hit : hits)
         {
 	    double x[] = hit.getPoint();
-	    //System.out.println("    hit position: x,y,z = "+df.format(x[0])+", "+df.format(x[1])+", "+df.format(x[2]));
-	    MCParticle mcP = hit.getMCParticle();
-	    if (mcP==null) {
-		if (warnNoMCParticle) System.err.println("TrackingCheater:: SimTrackerHit with no MCParticle");
-		warnNoMCParticle = false;
-		continue;
+	    MCParticle mcp = hit.getMCParticle(); String statusCode = getStatusCode(mcp);
+	    while (useFinalStateParticles && !statusCode.equals("GEN_FINAL_STATE")) {
+		List<MCParticle> parents = mcp.getParents();
+		MCParticle parent = null; if (!parents.isEmpty()) parent = parents.get(0);
+		if (parent!=null) { mcp = parent; statusCode = getStatusCode(mcp); } else break;
 	    }
-	    //if (first) System.out.println("    MCParticle PDGID,charge = "+mcP.getPDGID()+", "+mcP.getCharge());
-	    CheatTrack ct = result.get(mcP);
-	    if (ct == null) { result.put(mcP,ct = new CheatTrack(mcP)); NTracks++; }
+	    CheatTrack ct = result.get(mcp);
+	    if (ct == null) { result.put(mcp,ct = new CheatTrack(mcp)); NTracks++; }
 	    ct.addHit(hit);
 	}
 	return result;
     }
 
+    MCParticleClassifier mcpClassifier = new MCParticleClassifier();
+
+    String getStatusCode(MCParticle mcp)
+    {
+	String code = ""+mcpClassifier.getClassification(mcp);
+	return code;
+    }
+
     private Map<MCParticle, CombinedTrack> findCombinedTracks(List<List<CheatTrack>> collections)
     {
 	Map<MCParticle,CombinedTrack> result = new HashMap<MCParticle,CombinedTrack>();
 	for (List<CheatTrack> tracks : collections)
         {
 	    for (CheatTrack track : tracks) {
-		MCParticle mcP = track.getMCParticle();
-		CombinedTrack ct = result.get(mcP);
-		if (ct == null) { result.put(mcP,ct = new CombinedTrack(mcP)); NCombinedTracks++; }
+		MCParticle mcp = track.getMCParticle();
+		CombinedTrack ct = result.get(mcp);
+		if (ct == null) { result.put(mcp,ct = new CombinedTrack(mcp)); NCombinedTracks++; }
 		ct.add(track);
 	    }
 	}
@@ -196,11 +164,10 @@
 	loop.dispose();
     }
 
-    String ClassName = "TrackingCheater::"; String text;
+    String ClassName = "TrackingCheater::";
     int nEvt = 0;
     static boolean first = true, firstEvents = true;
     static boolean trace = true;
-    static boolean warnNoMCParticle = true;
 
     private DecimalFormat df = new DecimalFormat();
 }
CVSspam 0.2.8