Author: [log in to unmask]
Date: Thu Jul 9 19:55:06 2015
New Revision: 3255
Log:
make isolation plots
Modified:
java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackMCEfficiency.java
java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackMCEfficiency.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackMCEfficiency.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackMCEfficiency.java Thu Jul 9 19:55:06 2015
@@ -25,7 +25,6 @@
import org.lcsim.fit.helicaltrack.HelicalTrackCross;
import org.lcsim.fit.helicaltrack.HelixParamCalculator;
import org.lcsim.geometry.Detector;
-import org.lcsim.geometry.IDDecoder;
/**
* DQM driver for the monte carlo track efficiency; makes a bunch of efficiency
@@ -47,8 +46,6 @@
private String detectorFrameHitRelationsCollectionName = "HelicalTrackHitRelations";
private String trackHitRelationsCollectionName = "RotatedHelicalTrackHitRelations";
private String trackCollectionName = "MatchedTracks";
- private Detector detector = null;
- IDDecoder dec;
private IProfile1D peffFindable;
private IProfile1D phieffFindable;
private IProfile1D ctheffFindable;
@@ -93,7 +90,6 @@
@Override
protected void detectorChanged(Detector detector) {
- this.detector = detector;
aida.tree().mkdir(plotDir);
aida.tree().mkdir(resDir);
aida.tree().mkdir(misidDir);
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java Thu Jul 9 19:55:06 2015
@@ -92,6 +92,7 @@
IHistogram2D VtxYVsVtxZ;
IHistogram2D VtxXVsVtxZ;
IHistogram2D VtxXVsVtxY;
+ IHistogram2D L1IsoVsVz;
IHistogram2D pEleVspEle;
IHistogram2D pyEleVspyEle;
@@ -174,6 +175,7 @@
VtxXVsVtxZ = aida.histogram2D(plotDir + triggerType + "/" + "Vx vs Vz", 100, -10, 10, 100, -50, 80);
VtxYVsVtxZ = aida.histogram2D(plotDir + triggerType + "/" + "Vy vs Vz", 100, -5, 5, 100, -50, 80);
VtxXVsVtxY = aida.histogram2D(plotDir + triggerType + "/" + "Vx vs Vy", 100, -10, 10, 100, -5, 5);
+ L1IsoVsVz = aida.histogram2D(plotDir + triggerType + "/" + "L1 Isolation vs Vz", 50, -50, 80, 100, 0.0, 5.0);
pEleVspEle = aida.histogram2D(plotDir + triggerType + "/" + "2 Electron/P(e) vs P(e)", 50, 0, beamEnergy * maxFactor, 50, 0, beamEnergy * maxFactor);
pyEleVspyEle = aida.histogram2D(plotDir + triggerType + "/" + "2 Electron/Py(e) vs Py(e)", 50, -0.04, 0.04, 50, -0.04, 0.04);
pxEleVspxEle = aida.histogram2D(plotDir + triggerType + "/" + "2 Electron/Px(e) vs Px(e)", 50, -0.02, 0.06, 50, -0.02, 0.06);
@@ -261,6 +263,14 @@
pos = trks.get(0);
ele = trks.get(1);
}
+
+ Double[] eleIso = TrackUtils.getIsolations(ele.getTracks().get(0), hitToStrips, hitToRotated);
+ Double[] posIso = TrackUtils.getIsolations(pos.getTracks().get(0), hitToStrips, hitToRotated);
+ double eleL1Iso = Math.min(eleIso[0], eleIso[1]);
+ double posL1Iso = Math.min(posIso[0], posIso[1]);
+ double minL1Iso = Math.min(eleL1Iso,posL1Iso);
+ L1IsoVsVz.fill(uncVert.getPosition().z(), minL1Iso);
+
double pe = ele.getMomentum().magnitude();
double pp = pos.getMomentum().magnitude();
pEleVspPos.fill(pe, pp);
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 Thu Jul 9 19:55:06 2015
@@ -38,7 +38,6 @@
import org.lcsim.fit.helicaltrack.MultipleScatter;
import org.lcsim.geometry.subdetector.BarrelEndcapFlag;
import org.lcsim.recon.tracking.seedtracker.SeedCandidate;
-import org.lcsim.recon.tracking.seedtracker.SeedStrategy;
import org.lcsim.recon.tracking.seedtracker.SeedTrack;
import org.lcsim.util.swim.Helix;
@@ -916,4 +915,59 @@
}
return false;
}
+
+ public static int getLayer(TrackerHit strip) {
+ return ((RawTrackerHit) strip.getRawHits().get(0)).getLayerNumber();
+ }
+
+ /**
+ * Compute strip isolation, defined as the minimum distance to another strip
+ * in the same sensor. Strips are only checked if they formed valid crosses
+ * with the other strip in the cross (passing time and tolerance cuts).
+ *
+ * @param strip The strip whose isolation is being calculated.
+ * @param otherStrip The other strip in the stereo hit.
+ * @param hitToStrips
+ * @param hitToRotated
+ * @return Double_MAX_VALUE if no other strips found.
+ */
+ public static double getIsolation(TrackerHit strip, TrackerHit otherStrip, RelationalTable hitToStrips, RelationalTable hitToRotated) {
+ double nearestDistance = Double.MAX_VALUE;
+ for (TrackerHit cross : (Set<TrackerHit>) hitToStrips.allTo(otherStrip)) {
+ for (TrackerHit crossStrip : (Set<TrackerHit>) hitToStrips.allFrom(cross)) {
+ if (crossStrip != strip && crossStrip != otherStrip) {
+ Hep3Vector stripPosition = new BasicHep3Vector(strip.getPosition());
+ Hep3Vector crossStripPosition = new BasicHep3Vector(crossStrip.getPosition());
+ double distance = VecOp.sub(stripPosition, crossStripPosition).magnitude();
+// System.out.format("%s, %s, %s, %f\n", stripPosition, crossStripPosition, VecOp.sub(stripPosition, crossStripPosition), distance);
+ if (distance < nearestDistance) {
+ nearestDistance = distance;
+ }
+ }
+ }
+ }
+ return nearestDistance;
+ }
+
+ /**
+ * Make an array with isolations for all 12 strip layers. If the track
+ * doesn't use a layer, the isolation is null; if there is no other strip
+ * hit in a layer, the isolation is Double.MAX_VALUE.
+ *
+ * @param trk
+ * @param hitToStrips
+ * @param hitToRotated
+ * @return
+ */
+ public static Double[] getIsolations(Track trk, RelationalTable hitToStrips, RelationalTable hitToRotated) {
+ Double[] isolations = new Double[12];
+ for (TrackerHit hit : trk.getTrackerHits()) {
+ Set<TrackerHit> htsList = hitToStrips.allFrom(hitToRotated.from(hit));
+ TrackerHit[] strips = new TrackerHit[2];
+ htsList.toArray(strips);
+ isolations[TrackUtils.getLayer(strips[0]) - 1] = TrackUtils.getIsolation(strips[0], strips[1], hitToStrips, hitToRotated);
+ isolations[TrackUtils.getLayer(strips[1]) - 1] = TrackUtils.getIsolation(strips[1], strips[0], hitToStrips, hitToRotated);
+ }
+ return isolations;
+ }
}
|