Author: [log in to unmask]
Date: Fri Jan 20 15:46:17 2017
New Revision: 4684
Log:
Focused on SimTrackerHit analysis. Removed track analysis.
Modified:
java/trunk/analysis/src/main/java/org/hps/analysis/MC/MCTrackerHitResidualAnalysisDriver.java
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/MC/MCTrackerHitResidualAnalysisDriver.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/MC/MCTrackerHitResidualAnalysisDriver.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/MC/MCTrackerHitResidualAnalysisDriver.java Fri Jan 20 15:46:17 2017
@@ -13,7 +13,6 @@
import java.util.logging.Level;
import java.util.logging.Logger;
import org.hps.analysis.examples.DetailedAnalysisDriver;
-import org.hps.recon.tracking.TrackUtils;
import org.lcsim.detector.DetectorElementStore;
import org.lcsim.detector.IDetectorElement;
import org.lcsim.detector.IRotation3D;
@@ -22,14 +21,14 @@
import org.lcsim.detector.identifier.IExpandedIdentifier;
import org.lcsim.detector.identifier.IIdentifier;
import org.lcsim.detector.identifier.IIdentifierDictionary;
-import org.lcsim.detector.tracker.silicon.HpsSiSensor;
import org.lcsim.detector.tracker.silicon.SiSensor;
import org.lcsim.event.EventHeader;
+import org.lcsim.event.LCRelation;
import org.lcsim.event.RawTrackerHit;
import org.lcsim.event.RelationalTable;
import org.lcsim.event.SimTrackerHit;
-import org.lcsim.event.Track;
import org.lcsim.event.TrackerHit;
+import org.lcsim.event.base.BaseRelationalTable;
import org.lcsim.util.Driver;
import org.lcsim.util.aida.AIDA;
@@ -51,10 +50,41 @@
AIDA aida = AIDA.defaultInstance();
String aidaFileName = "MCTrackerHitResidualAnalysisDriverPlots";
String aidaFileType = "aida";
+
+ boolean _debug = false;
+
+ private String siClusterCollectionName = "StripClusterer_SiTrackerHitStrip1D";
@Override
protected void process(EventHeader event)
{
+
+ //cng
+ // make relational table for strip clusters to mc particle
+ RelationalTable mcHittomcP = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
+ RelationalTable rawtomc = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
+ if (event.hasCollection(LCRelation.class, "SVTTrueHitRelations")) {
+ List<LCRelation> trueHitRelations = event.get(LCRelation.class, "SVTTrueHitRelations");
+ for (LCRelation relation : trueHitRelations) {
+ if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
+ rawtomc.add(relation.getFrom(), relation.getTo());
+ }
+ }
+ }
+ List<TrackerHit> siClusters = event.get(TrackerHit.class, siClusterCollectionName);
+ RelationalTable clustertosimhit = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
+ for (TrackerHit cluster : siClusters) {
+ List<RawTrackerHit> rawHits = cluster.getRawHits();
+ for (RawTrackerHit rth : rawHits) {
+ Set<SimTrackerHit> simTrackerHits = rawtomc.allFrom(rth);
+ if (simTrackerHits != null) {
+ for (SimTrackerHit simhit : simTrackerHits) {
+ clustertosimhit.add(cluster, simhit);
+ }
+ }
+ }
+ }
+ //cng
// a map of MC hit positions keyed on sensor name
Map<String, List<Double>> mcSensorHitPositionMap = new HashMap<String, List<Double>>();
// a map of Tracker hit positions keyed on sensor name
@@ -63,9 +93,25 @@
// First step is to get the SimTrackerHits and determine their location
// in local coordinates.
List<SimTrackerHit> simHits = event.get(SimTrackerHit.class, "TrackerHits");
- System.out.println("found " + simHits.size() + " SimTrackerHits");
+ if(_debug) System.out.println("found " + simHits.size() + " SimTrackerHits");
// loop over each hit
for (SimTrackerHit hit : simHits) {
+ Hep3Vector stripPos = null;
+ SymmetricMatrix covG = null;
+ // did we correctly map clusters to this simhit?
+ Set<TrackerHit> clusters = clustertosimhit.allTo(hit);
+ if(_debug) System.out.println("found " + clusters.size() + " clusters associated to this SimTrackerHit");
+ int clusterSize = 0;
+ if (clusters != null) {
+ for (TrackerHit clust : clusters) {
+ clusterSize = clust.getRawHits().size();
+ double[] clusPos = clust.getPosition();
+ stripPos = new BasicHep3Vector(clusPos);
+ // now for the uncertainty in u
+ covG = new SymmetricMatrix(3, clust.getCovMatrix(), true);
+ }
+ }
+
// get the hit's position in global coordinates..
Hep3Vector globalPos = hit.getPositionVec();
// get the transformation from global to local
@@ -96,7 +142,15 @@
// System.out.println("local position " + localPos);
String sensorName = hit.getDetectorElement().getName();
double u = localPos.x();
- System.out.println("MC " + hit.getDetectorElement().getName() + " u= " + localPos.x());
+ if (stripPos != null) {
+ Hep3Vector clusLocalPos = g2lXform.transformed(stripPos);
+ double clusU = clusLocalPos.x();
+ aida.cloud1D(sensorName + " " + clusterSize + " strip cluster u-MC_u").fill(clusU - u);
+ SymmetricMatrix covL = g2lXform.transformed(covG);
+ double sigmaU = sqrt(covL.e(0, 0));
+ aida.cloud1D(sensorName + " " + clusterSize + " strip cluster u-MC_u pull").fill((clusU - u)/sigmaU);
+ }
+ if(_debug) System.out.println("MC " + hit.getDetectorElement().getName() + " u= " + localPos.x());
if (mcSensorHitPositionMap.containsKey(sensorName)) {
List<Double> vals = mcSensorHitPositionMap.get(sensorName);
vals.add(u);
@@ -107,46 +161,46 @@
}
} // end of loop over SimTrackerHits
- // let's look at Tracker hits
- setupSensors(event);
- RelationalTable hitToStrips = TrackUtils.getHitToStripsTable(event);
- RelationalTable hitToRotated = TrackUtils.getHitToRotatedTable(event);
- List<Track> tracks = event.get(Track.class, "MatchedTracks");
- System.out.println("found " + tracks.size() + " tracks");
- for (Track t : tracks) {
- List<TrackerHit> hits = t.getTrackerHits();
- System.out.println("track has " + hits.size() + " hits");
- if (hits.size() == 6) {
- for (TrackerHit h : hits) {
- Set<TrackerHit> stripList = hitToStrips.allFrom(hitToRotated.from(h));
- for (TrackerHit strip : stripList) {
- List rawHits = strip.getRawHits();
- HpsSiSensor sensor = null;
- for (Object o : rawHits) {
- RawTrackerHit rth = (RawTrackerHit) o;
- // TODO figure out why the following collection is always null
- //List<SimTrackerHit> stipMCHits = rth.getSimTrackerHits();
- sensor = (HpsSiSensor) rth.getDetectorElement();
- }
- int nHitsInCluster = rawHits.size();
- String sensorName = sensor.getName();
- Hep3Vector posG = new BasicHep3Vector(strip.getPosition());
- Hep3Vector posL = sensor.getGeometry().getGlobalToLocal().transformed(posG);
- double u = posL.x();
- double mcU = mcSensorHitPositionMap.get(sensorName).get(0);
-
- aida.cloud1D(sensorName + "_" + nHitsInCluster + "_hitCluster meas - MC u position").fill(u - mcU);
- // now for the uncertainty in u
- SymmetricMatrix covG = new SymmetricMatrix(3, strip.getCovMatrix(), true);
- SymmetricMatrix covL = sensor.getGeometry().getGlobalToLocal().transformed(covG);
- double sigmaU = sqrt(covL.e(0, 0));
- aida.cloud1D(sensorName + "_" + nHitsInCluster + "_hitCluster meas - MC u position pull").fill((u - mcU) / sigmaU);
- aida.cloud1D(sensorName + " number of hits in cluster").fill(nHitsInCluster);
- System.out.println(" Track Hit: " + nHitsInCluster + " " + sensorName + " u " + u + " mcU " + mcU + " sigmaU " + sigmaU);
- }
- }
- } // end of loop over six-hit tracks
- } // end of loop over tracks
+// // let's look at Tracker hits
+// setupSensors(event);
+// RelationalTable hitToStrips = TrackUtils.getHitToStripsTable(event);
+// RelationalTable hitToRotated = TrackUtils.getHitToRotatedTable(event);
+// List<Track> tracks = event.get(Track.class, "MatchedTracks");
+// System.out.println("found " + tracks.size() + " tracks");
+// for (Track t : tracks) {
+// List<TrackerHit> hits = t.getTrackerHits();
+// System.out.println("track has " + hits.size() + " hits");
+// if (hits.size() == 6) {
+// for (TrackerHit h : hits) {
+// Set<TrackerHit> stripList = hitToStrips.allFrom(hitToRotated.from(h));
+// for (TrackerHit strip : stripList) {
+// List rawHits = strip.getRawHits();
+// HpsSiSensor sensor = null;
+// for (Object o : rawHits) {
+// RawTrackerHit rth = (RawTrackerHit) o;
+// // TODO figure out why the following collection is always null
+// List<SimTrackerHit> stipMCHits = rth.getSimTrackerHits();
+// sensor = (HpsSiSensor) rth.getDetectorElement();
+// }
+// int nHitsInCluster = rawHits.size();
+// String sensorName = sensor.getName();
+// Hep3Vector posG = new BasicHep3Vector(strip.getPosition());
+// Hep3Vector posL = sensor.getGeometry().getGlobalToLocal().transformed(posG);
+// double u = posL.x();
+// double mcU = mcSensorHitPositionMap.get(sensorName).get(0);
+//
+// aida.cloud1D(sensorName + "_" + nHitsInCluster + "_hitCluster meas - MC u position").fill(u - mcU);
+// // now for the uncertainty in u
+// SymmetricMatrix covG = new SymmetricMatrix(3, strip.getCovMatrix(), true);
+// SymmetricMatrix covL = sensor.getGeometry().getGlobalToLocal().transformed(covG);
+// double sigmaU = sqrt(covL.e(0, 0));
+// aida.cloud1D(sensorName + "_" + nHitsInCluster + "_hitCluster meas - MC u position pull").fill((u - mcU) / sigmaU);
+// aida.cloud1D(sensorName + " number of hits in cluster").fill(nHitsInCluster);
+// System.out.println(" Track Hit: " + nHitsInCluster + " " + sensorName + " u " + u + " mcU " + mcU + " sigmaU " + sigmaU);
+// }
+// }
+// } // end of loop over six-hit tracks
+// } // end of loop over tracks
}
protected void endOfData()
|