lcsim/src/org/lcsim/recon/ztracking/cheater
diff -u -r1.2 -r1.3
--- TrackingCheater.java 3 Aug 2005 23:43:18 -0000 1.2
+++ TrackingCheater.java 5 Aug 2005 00:32:56 -0000 1.3
@@ -7,20 +7,18 @@
package org.lcsim.recon.ztracking.cheater;
-/*
import org.lcsim.event.EventHeader;
import org.lcsim.event.MCParticle;
import org.lcsim.event.SimTrackerHit;
import org.lcsim.event.Track;
-import org.lcsim.recon.ztracking.FoundTrack;
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 hep.lcio.event.*;
+//import hep.lcio.implementation.io.LCFactory;
+//import hep.lcio.io.*;
import java.io.File;
import java.text.DecimalFormat;
@@ -28,19 +26,13 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-*/
+
/**
* The Tracking cheater works by finding perfectly reconstructed tracks
* using the MC truth information associated with each hit.
*
*/
-
-public class TrackingCheater
-{
-
-}
-/*
public class TrackingCheater extends Driver
// public class TrackingCheater extends AbstractTracker
{
@@ -49,7 +41,7 @@
int NTracks = 0, NCombinedTracks = 0;
-
+ /** */
public TrackingCheater()
{
String text = ClassName+" version 0.7";
@@ -75,15 +67,14 @@
for (List<SimTrackerHit> collection : collections)
{
String name = event.getMetaData(collection).getName();
- if (name.equals("TkrEndcapHits")||name.equals("VtxEndcapHits")) continue;
- if (first) System.out.println(" Find "+name+" 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()));
}
// Find combined tracks.
List<List<CheatTrack>> trackLists = event.get(CheatTrack.class);
- if (first) System.out.println(" Find combined tracks.");
+ if (first) System.out.println(" Find combined cheater tracks.");
Map<MCParticle, CombinedTrack> combined = findCombinedTracks(trackLists);
if (combined.size() > 0) event.put("CombinedTracks",new ArrayList(combined.values()));
@@ -92,13 +83,13 @@
aida.cloud1D("NTracks").fill(NTracks);
aida.cloud1D("NCombined").fill(NCombinedTracks);
- List<List<FoundTrack>> foundTrackLists = event.get(FoundTrack.class);
- for (List<FoundTrack> tracks : foundTrackLists ) {
+ 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 (FoundTrack track : tracks) {
+ for (CheatTrack track : tracks) {
MCParticle mcP = track.getMCParticle();
int nPoints = track.getNPoints(); np+=nPoints;
aida.cloud1D("NBarrelPoints").fill(nPoints);
@@ -108,7 +99,7 @@
else if (name.equals("CombinedTracks")) {
if (first) System.out.println(" Plot "+name+" points");
int np=0;
- for (FoundTrack track : tracks) {
+ for (CheatTrack track : tracks) {
MCParticle mcP = track.getMCParticle();
CombinedTrack trk = (CombinedTrack) track;
int nPoints = 0;
@@ -127,6 +118,7 @@
if (nEvt>=3) firstEvents = false;
}
+
private Map<MCParticle,CheatTrack> findTracks(List<SimTrackerHit> hits)
{
Map<MCParticle,CheatTrack> result = new HashMap<MCParticle,CheatTrack>();
@@ -136,6 +128,11 @@
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;
+ }
//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++; }
@@ -156,10 +153,19 @@
ct.add(track);
}
}
+
+ // Reject combined tracks with 1 or 2 hits.
+ List<MCParticle> mcpList = new ArrayList();
+ for (MCParticle mcp : result.keySet()) {
+ CheatTrack track = result.get(mcp);
+ if (track.getNPoints()<=2) mcpList.add(mcp);
+ }
+ for (MCParticle mcp : mcpList) result.remove(mcp);
+
return result;
}
- // Get fraction of hits from parent MC particle.
+ /** Get fraction of hits from parent MC particle. */
public double getMCPFraction(int itrk)
{
return 1.0;
@@ -170,16 +176,16 @@
String JobName = "TestTrackingCheater";
String text = "Running "+JobName+" in Batch mode.";
System.out.println(text); System.err.println(text);
-
-// ILCFactory factory = LCFactory.getInstance();
-// LCReader reader = factory.createLCReader();
-// reader.open(args[0]);
-// reader.registerLCEventListener(analysis);
-// reader.readStream();
-// reader.close();
-// System.out.println("Analyzed "+analysis.nEvents+" events");
-// analysis.tree.commit();
-
+ /*
+ ILCFactory factory = LCFactory.getInstance();
+ LCReader reader = factory.createLCReader();
+ reader.open(args[0]);
+ reader.registerLCEventListener(analysis);
+ reader.readStream();
+ reader.close();
+ System.out.println("Analyzed "+analysis.nEvents+" events");
+ analysis.tree.commit();
+ */
// Create an analysis job.
LCSimLoop loop = new LCSimLoop();
TrackingCheater analysis = new TrackingCheater();
@@ -199,36 +205,3 @@
private DecimalFormat df = new DecimalFormat();
}
-
-
-class CheatTrack extends FoundTrack
-{
- static boolean warnUnknownMCParticle = true;
-
- CheatTrack(MCParticle particle)
- {
- super(particle);
-
-// if (particle.hashCode()<0) {
-// if (warnUnknownMCParticle) {
-// System.err.println("TrackingCheater::CheatTrack: Unknown MCParticle - hashCode = "+particle.hashCode());
-// warnUnknownMCParticle = false;
-// }
-// }
-
- }
-}
-
-class CombinedTrack extends FoundTrack
-{
- List list = new ArrayList();
-
- CombinedTrack(MCParticle particle)
- {
- super(particle);
- }
- void add(FoundTrack track) { list.add(track); }
- int getNTracks() { return list.size(); }
- FoundTrack getTrack(int n) { return (FoundTrack) list.get(n); }
-}
-*/
\ No newline at end of file