hps-java/src/main/java/org/lcsim/hps/users/omoreno
diff -u -r1.4 -r1.5
--- SvtTrackRecoEfficiency.java 27 Sep 2012 06:55:57 -0000 1.4
+++ SvtTrackRecoEfficiency.java 2 Oct 2012 06:15:52 -0000 1.5
@@ -36,6 +36,7 @@
import org.lcsim.fit.helicaltrack.HelicalTrackStrip;
import org.lcsim.geometry.Detector;
+import org.lcsim.hps.recon.tracking.HPSFittedRawTrackerHit;
//--- hps-java ---//
import org.lcsim.hps.recon.tracking.SvtUtils;
import org.lcsim.hps.recon.tracking.TrackAnalysis;
@@ -45,7 +46,7 @@
/**
*
* @author Omar Moreno <[log in to unmask]>
- * @version $Id: SvtTrackRecoEfficiency.java,v 1.4 2012/09/27 06:55:57 omoreno Exp $
+ * @version $Id: SvtTrackRecoEfficiency.java,v 1.5 2012/10/02 06:15:52 omoreno Exp $
*/
public class SvtTrackRecoEfficiency extends Driver {
@@ -105,6 +106,14 @@
public void setMomentumOutputFile(String momentumOutputFile){
this.momentumOutputFile = momentumOutputFile;
}
+
+ /**
+ * Set the required number of layers an MC particle must hit
+ */
+ public void setTotalLayersHit(int totalLayersHit){
+ if(totalLayersHit%2 == 1) throw new RuntimeException(this.getClass().getSimpleName() + ": Total number of layers hit must be even");
+ this.totalLayersHit = totalLayersHit;
+ }
/**
*
@@ -170,21 +179,33 @@
}
// The SimTrackerHits should not be stored for more than 200 events
- if(eventNumber%500 == 0 && !simTrackerHits.isEmpty()){
+ if(eventNumber%200 == 0 && !simTrackerHits.isEmpty()){
simTrackerHits.clear();
}
// Skip the event if it doesn't contain RawTrackerHits; Only interested in triggered events
if(!event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) return;
+ List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
+ for(RawTrackerHit rawHit : rawHits){
+ System.out.println(this.getClass().getSimpleName() + ": Sensor: " + SvtUtils.getInstance().getDescription((SiSensor) rawHit.getDetectorElement())
+ + ": Raw hit channel: " + rawHit.getIdentifierFieldValue("strip"));
+ }
+
+ List<HPSFittedRawTrackerHit> fittedRawHits = event.get(HPSFittedRawTrackerHit.class, "SVTFittedRawTrackerHits");
+ for(HPSFittedRawTrackerHit fittedRawHit : fittedRawHits){
+ System.out.println(this.getClass().getSimpleName() + ": Sensor: " + SvtUtils.getInstance().getDescription((SiSensor) fittedRawHit.getRawTrackerHit().getDetectorElement())
+ + ": Raw hit channel: " + fittedRawHit.getRawTrackerHit().getIdentifierFieldValue("strip") + ": Fit" + fittedRawHit.getShapeFitParameters());
+ }
+
System.out.println(this.getClass().getSimpleName() + ": Number of SimTrackerHits: " + simTrackerHits.size());
// Get the MC Particles associated with the SimTrackerHits
List<MCParticle> mcParticles = new ArrayList<MCParticle>();
System.out.print(this.getClass().getSimpleName() + ": MC Particles: ");
for(SimTrackerHit simTrackerHit : simTrackerHits){
- System.out.print(simTrackerHit.getMCParticle().getPDGID() + " ");
if(mcParticles.contains(simTrackerHit.getMCParticle())) continue;
+ System.out.print(simTrackerHit.getMCParticle().getPDGID() + " ");
mcParticles.add(simTrackerHit.getMCParticle());
}
System.out.print("\n");
@@ -196,10 +217,13 @@
trackIsFindable = false;
while(mcParticleIterator.hasNext()){
MCParticle mcParticle = mcParticleIterator.next();
- if(findable.isTrackFindable(mcParticle, 10)){
+ if(findable.isTrackFindable(mcParticle, totalLayersHit)){
// Check that all SimTrackerHits are within the same detector volume
Set<SimTrackerHit> trackerHits = findable.getSimTrackerHits(mcParticle);
+ for(SimTrackerHit trackerHit : trackerHits){
+ System.out.println(this.getClass().getSimpleName() + ": SimTrackerHit position: " + trackerHit.getPositionVec().toString());
+ }
if(this.isSameSvtVolume(trackerHits)){
if(debug) System.out.println(this.getClass().getSimpleName() + ": Track is findable ...");
findableTracks++;
@@ -214,13 +238,17 @@
if(!event.hasCollection(Track.class, trackCollectionName) || !trackIsFindable) return;
List<Track> tracks = event.get(Track.class, trackCollectionName);
+ System.out.println(this.getClass().getSimpleName() + ": Number of tracks: " + tracks.size());
+
if(mcParticles.isEmpty() && !tracks.isEmpty()){
throw new RuntimeException(this.getClass().getSimpleName() + ": Tracks have no associated MC particle");
}
+ List<HelicalTrackHit> stereoHits = event.get(HelicalTrackHit.class, stereoHitCollectionName);
+ System.out.println(this.getClass().getSimpleName() + ": Number of stereo hits: " + stereoHits.size());
+
// Relate a stereo hits to a SimTrackerHit; This is a required argument by TrackAnalysis
- RelationalTable<HelicalTrackHit, MCParticle> hitToMC =
- stereoHitToMC(event.get(HelicalTrackHit.class, stereoHitCollectionName), simTrackerHits);
+ RelationalTable<HelicalTrackHit, MCParticle> hitToMC = stereoHitToMC(stereoHits, simTrackerHits);
// Check if an MC particle is related to a found track
for(Track track : tracks){
@@ -239,6 +267,7 @@
if(trackingEfficiencyPlots){
// If the list still contains MC Particles, a matching track wasn't found
+ System.out.println(this.getClass().getSimpleName() + ": No matching track found");
for(MCParticle mcParticle : mcParticles){
aida.histogram1D("Tracking Efficiency").fill(mcParticle.getMomentum().magnitude(), 0);
aida.histogram1D("Momentum").fill(mcParticle.getMomentum().magnitude());