lcsim/src/org/lcsim/recon/ztracking/cheater
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();
}