Author: [log in to unmask]
Date: Fri May 1 17:11:04 2015
New Revision: 2876
Log:
add track truth mc function. add debug option.
Modified:
java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java Fri May 1 17:11:04 2015
@@ -192,7 +192,7 @@
* @return position at ECAL
*/
public static Hep3Vector getTrackPositionAtEcal(Track track) {
- return extrapolateTrack(track, BeamlineConstants.ECAL_FACE_TESTRUN);
+ return extrapolateTrack(track, BeamlineConstants.ECAL_FACE);
}
/**
@@ -663,8 +663,18 @@
* @return helix object based on the MC particle
*/
public static HelicalTrackFit getHTF(MCParticle mcp, double Bz) {
+ boolean debug = true;
+ if(debug) {
+ System.out.printf("getHTF\n");
+ System.out.printf("mcp org %s mc p %s\n",mcp.getOrigin().toString(),mcp.getMomentum().toString());
+ }
Hep3Vector org = CoordinateTransformations.transformVectorToTracking(mcp.getOrigin());
Hep3Vector p = CoordinateTransformations.transformVectorToTracking(mcp.getMomentum());
+
+ if(debug) {
+ System.out.printf("mcp org %s mc p %s (trans)\n",org.toString(),p.toString());
+ }
+
// Move to x=0 if needed
double targetX = BeamlineConstants.DIPOLE_EDGELOW_TESTRUN;
if (org.x() < targetX) {
@@ -681,7 +691,9 @@
// old.toString(),p.toString(),org.toString());
}
- // System.out.printf("outside org %s p %s \n",p.toString(),org.toString());
+ if(debug) {
+ System.out.printf("mcp org %s mc p %s (trans2)\n",org.toString(),p.toString());
+ }
HelixParamCalculator helixParamCalculator = new HelixParamCalculator(p, org, -1 * ((int) mcp.getCharge()), Bz);
double par[] = new double[5];
@@ -691,8 +703,8 @@
par[HelicalTrackFit.curvatureIndex] = 1.0 / helixParamCalculator.getRadius();
par[HelicalTrackFit.z0Index] = helixParamCalculator.getZ0();
HelicalTrackFit htf = getHTF(par);
- // System.out.printf("d0 %f z0 %f R %f phi %f lambda %s\n",
- // htf.dca(),htf.z0(),htf.R(),htf.phi0(),htf.slope() );
+ System.out.printf("d0 %f z0 %f R %f phi %f lambda %s\n",
+ htf.dca(),htf.z0(),htf.R(),htf.phi0(),htf.slope() );
return htf;
}
@@ -735,5 +747,59 @@
// System.out.printf("%s: straight line track: x0=%f,y0=%f,z0=%f dz/dx=%f dydx=%f targetY=%f targetZ=%f \n",this.getClass().getSimpleName(),slt1.x0(),slt1.y0(),slt1.z0(),slt1.dzdx(),slt1.dydx(),slt1.TargetYZ()[0],slt1.TargetYZ()[1]);
return slt1;
}
+
+
+
+ public static MCParticle getMatchedTruthParticle(Track track) {
+ boolean debug = false;
+
+ Map<MCParticle,Integer> particlesOnTrack = new HashMap<MCParticle,Integer>();
+
+ if(debug) System.out.printf("getMatchedTruthParticle: getmatched mc particle from %d tracker hits on the track \n",track.getTrackerHits().size());
+
+
+ for(TrackerHit hit : track.getTrackerHits()) {
+ List<MCParticle> mcps = ((HelicalTrackHit)hit).getMCParticles();
+ if(mcps==null) {
+ System.out.printf("getMatchedTruthParticle: warning, this hit (layer %d pos=%s) has no mc particles.\n",((HelicalTrackHit)hit).Layer(),((HelicalTrackHit)hit).getCorrectedPosition().toString());
+ }
+ else {
+ if( debug ) System.out.printf("getMatchedTruthParticle: this hit (layer %d pos=%s) has %d mc particles.\n",((HelicalTrackHit)hit).Layer(),((HelicalTrackHit)hit).getCorrectedPosition().toString(),mcps.size());
+ for(MCParticle mcp : mcps) {
+ if( !particlesOnTrack.containsKey(mcp) ) {
+ particlesOnTrack.put(mcp, 0);
+ }
+ int c = particlesOnTrack.get(mcp);
+ particlesOnTrack.put(mcp, c+1);
+ }
+ }
+ }
+ if(debug) {
+ System.out.printf("Track p=[ %f, %f, %f] \n",track.getTrackStates().get(0).getMomentum()[0],track.getTrackStates().get(0).getMomentum()[1],track.getTrackStates().get(0).getMomentum()[1]);
+ System.out.printf("Found %d particles\n",particlesOnTrack.size());
+ for(Map.Entry<MCParticle, Integer> entry : particlesOnTrack.entrySet()) {
+ System.out.printf("%d hits assigned to %d p=%s \n",entry.getValue(),entry.getKey().getPDGID(),entry.getKey().getMomentum().toString());
+ }
+ }
+ Map.Entry<MCParticle,Integer> maxEntry = null;
+ for(Map.Entry<MCParticle,Integer> entry : particlesOnTrack.entrySet()) {
+ if ( maxEntry == null || entry.getValue().compareTo(maxEntry.getValue()) > 0 ) maxEntry = entry;
+ //if ( maxEntry != null ) {
+ // if(entry.getValue().compareTo(maxEntry.getValue()) < 0) continue;
+ //}
+ //maxEntry = entry;
+ }
+ if(debug) {
+ if (maxEntry != null ) {
+ System.out.printf("Matched particle with pdgId=%d and mom %s to track with charge %d and momentum [%f %f %f]\n",
+ maxEntry.getKey().getPDGID(),maxEntry.getKey().getMomentum().toString(),
+ track.getCharge(),track.getTrackStates().get(0).getMomentum()[0],track.getTrackStates().get(0).getMomentum()[1],track.getTrackStates().get(0).getMomentum()[2]);
+ } else {
+ System.out.printf("No truth particle found on this track\n");
+ }
+ }
+ return maxEntry == null ? null : maxEntry.getKey();
+ }
+
}
|