Author: [log in to unmask]
Date: Thu Jan 22 13:17:07 2015
New Revision: 1968
Log:
plots for monitoring hit time reconstruction
Modified:
java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SVTHitMCEfficiency.java
java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackMCEfficiency.java
java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SVTHitMCEfficiency.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SVTHitMCEfficiency.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SVTHitMCEfficiency.java Thu Jan 22 13:17:07 2015
@@ -80,6 +80,9 @@
createLayerPlot2D(plotDir + "fitT0ChiProb", kk, 200, -100, 100, 100, 0, 1.0);
createLayerPlot2D(plotDir + "fitAmpChiProb", kk, 200, 0, 20000, 100, 0, 1.0);
createLayerPlot1D(plotDir + "signalClusterT0", kk, 500, -100, 100);
+ createLayerPlot2D(plotDir + "signalClusterSizeT0", kk, 200, -100, 100, 10, 0.5, 10.5);
+
+ createLayerPlot2D(plotDir + "goodClusterFits", kk, 200, -100, 100, 100, 0, 20000);
createLayerPlot2D(plotDir + "badClusterFits", kk, 200, -100, 100, 100, 0, 20000);
}
resetEfficiencyMap();
@@ -190,6 +193,7 @@
if (clusters != null) {
for (TrackerHit clust : clusters) {
getLayerPlot1D(plotDir + "signalClusterT0", simhit.getLayer()).fill(clust.getTime());
+ getLayerPlot2D(plotDir + "signalClusterSizeT0", simhit.getLayer()).fill(clust.getTime(), clust.getRawHits().size());
for (int i = 0; i < 16; i++) {
if (Math.abs(clust.getTime()) < i + 1) {
@@ -198,7 +202,12 @@
}
if (Math.abs(clust.getTime()) < t0Cut) {
gotCluster = 1;
+ for (RawTrackerHit rth : (List<RawTrackerHit>) clust.getRawHits()) {
+ GenericObject fit = (GenericObject) rthtofit.to(rth);
+ getLayerPlot2D(plotDir + "goodClusterFits", simhit.getLayer()).fill(ShapeFitParameters.getT0(fit), ShapeFitParameters.getAmp(fit));
+ }
} else {
+// System.out.println(clust.getRawHits().size());
for (RawTrackerHit rth : (List<RawTrackerHit>) clust.getRawHits()) {
GenericObject fit = (GenericObject) rthtofit.to(rth);
getLayerPlot2D(plotDir + "badClusterFits", simhit.getLayer()).fill(ShapeFitParameters.getT0(fit), ShapeFitParameters.getAmp(fit));
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 Jan 22 13:17:07 2015
@@ -62,7 +62,7 @@
int findableelectrons = 0;
int findableTracks = 0;
double foundTracks = 0;
- private boolean debugTrackEfficiency = true;
+ private boolean debugTrackEfficiency = false;
private String plotDir = "TrackMCEfficiency/";
private String resDir = "TrackMCResolution/";
private String misidDir = "TrackMCMisId/";
@@ -110,7 +110,7 @@
IHistogram1D pMCRes = hf.createHistogram1D(resDir + "Momentum Resolution", 50, -0.5, 0.5);
IHistogram1D phi0MCRes = hf.createHistogram1D(resDir + "phi0 Resolution", 50, -0.1, 0.1);
IHistogram1D d0MCRes = hf.createHistogram1D(resDir + "d0 Resolution", 50, -0.5, 0.5);
- IHistogram1D z0MCRes = hf.createHistogram1D(resDir + "z0 Resolution", 50, -1.0,1.0);
+ IHistogram1D z0MCRes = hf.createHistogram1D(resDir + "z0 Resolution", 50, -1.0, 1.0);
IHistogram1D tanLambdaMCRes = hf.createHistogram1D(resDir + "tanLambda Resolution", 50, -0.1, 0.1);
}
@@ -153,24 +153,37 @@
Map<Track, TrackAnalysis> tkanalMap = new HashMap<Track, TrackAnalysis>();
RelationalTable hittomc = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
List<LCRelation> mcrelations = event.get(LCRelation.class, trackHitMCRelationsCollectionName);
- for (LCRelation relation : mcrelations)
- if (relation != null && relation.getFrom() != null && relation.getTo() != null)
+ if (debugTrackEfficiency) {
+ System.out.println(this.getClass().getSimpleName() + ": number of MC relations = " + mcrelations.size());
+ }
+ for (LCRelation relation : mcrelations) {
+ if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
hittomc.add(relation.getFrom(), relation.getTo());
+ }
+ }
+ if (debugTrackEfficiency) {
+ System.out.println(this.getClass().getSimpleName() + ": number of hittomc relations = " + hittomc.size());
+ }
RelationalTable mcHittomcP = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
// Get the collections of SimTrackerHits
List<List<SimTrackerHit>> simcols = event.get(SimTrackerHit.class);
// Loop over the SimTrackerHits and fill in the relational table
- for (List<SimTrackerHit> simlist : simcols)
- for (SimTrackerHit simhit : simlist)
- if (simhit.getMCParticle() != null)
+ for (List<SimTrackerHit> simlist : simcols) {
+ for (SimTrackerHit simhit : simlist) {
+ if (simhit.getMCParticle() != null) {
mcHittomcP.add(simhit, simhit.getMCParticle());
+ }
+ }
+ }
RelationalTable trktomc = 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)
+ for (LCRelation relation : trueHitRelations) {
+ if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
rawtomc.add(relation.getFrom(), relation.getTo());
+ }
+ }
}
// make relational table for strip clusters to mc particle
List<TrackerHit> siClusters = event.get(TrackerHit.class, siClusterCollectionName);
@@ -179,9 +192,11 @@
List<RawTrackerHit> rawHits = cluster.getRawHits();
for (RawTrackerHit rth : rawHits) {
Set<SimTrackerHit> simTrackerHits = rawtomc.allFrom(rth);
- if (simTrackerHits != null)
- for (SimTrackerHit simhit : simTrackerHits)
+ if (simTrackerHits != null) {
+ for (SimTrackerHit simhit : simTrackerHits) {
clustertosimhit.add(cluster, simhit);
+ }
+ }
}
}
//relational tables from mc particle to raw and fitted tracker hits
@@ -190,33 +205,46 @@
for (LCRelation hit : fittedTrackerHits) {
RawTrackerHit rth = FittedRawTrackerHit.getRawTrackerHit(hit);
Set<SimTrackerHit> simTrackerHits = rawtomc.allFrom(rth);
- if (simTrackerHits != null)
- for (SimTrackerHit simhit : simTrackerHits)
- if (simhit.getMCParticle() != null)
+ if (simTrackerHits != null) {
+ for (SimTrackerHit simhit : simTrackerHits) {
+ if (simhit.getMCParticle() != null) {
fittomc.add(hit, simhit.getMCParticle());
+ }
+ }
+ }
}
RelationalTable hittostrip = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
List<LCRelation> hitrelations = event.get(LCRelation.class, detectorFrameHitRelationsCollectionName);
- for (LCRelation relation : hitrelations)
- if (relation != null && relation.getFrom() != null && relation.getTo() != null)
+ for (LCRelation relation : hitrelations) {
+ if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
hittostrip.add(relation.getFrom(), relation.getTo());
+ }
+ }
RelationalTable hittorotated = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_ONE, RelationalTable.Weighting.UNWEIGHTED);
List<LCRelation> rotaterelations = event.get(LCRelation.class, trackHitRelationsCollectionName);
- for (LCRelation relation : rotaterelations)
- if (relation != null && relation.getFrom() != null && relation.getTo() != null)
+ for (LCRelation relation : rotaterelations) {
+ if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
hittorotated.add(relation.getFrom(), relation.getTo());
+ }
+ }
// Instantiate the class that determines if a track is "findable"
FindableTrack findable = new FindableTrack(event);
List<Track> tracks = event.get(Track.class, trackCollectionName);
+ if (debugTrackEfficiency) {
+ System.out.println(this.getClass().getSimpleName() + ": nTracks = " + tracks.size());
+ }
for (Track trk : tracks) {
TrackAnalysis tkanal = new TrackAnalysis(trk, hittomc, rawtomc, hittostrip, hittorotated);
tkanalMap.put(trk, tkanal);
MCParticle mcp = tkanal.getMCParticleNew();
if (mcp != null) {// Create a map between the tracks found and the assigned MC particle
+ if (debugTrackEfficiency) {
+ System.out.println(this.getClass().getSimpleName() + ": found MCP match");
+ }
trktomc.add(trk, tkanal.getMCParticleNew());
}
}
@@ -238,6 +266,9 @@
double eta = -Math.log(Math.tan(Math.atan2(pt, pz) / 2));
double phi = Math.atan2(px, pz);
// Find the number of layers hit by this mc particle
+ if (debugTrackEfficiency) {
+ System.out.println("MC pt=" + pt);
+ }
int nhits = findable.LayersHit(mcp);
boolean isFindable = findable.InnerTrackerIsFindable(mcp, nlayers - 2);
@@ -258,14 +289,17 @@
//it's the A'...let's see if we found both tracks.
List<MCParticle> daughters = mcp.getDaughters();
for (MCParticle d : daughters) {
- if (trktomc.allTo(d).isEmpty())
+ if (trktomc.allTo(d).isEmpty()) {
bothreco = false;
- if (!findable.InnerTrackerIsFindable(d, nlayers - 2))
+ }
+ if (!findable.InnerTrackerIsFindable(d, nlayers - 2)) {
bothfindable = false;
+ }
}
double vtxWgt = 0;
- if (bothreco)
+ if (bothreco) {
vtxWgt = 1.0;
+ }
// VxEff.fill(mcp.getOriginX(), vtxWgt);
// VyEff.fill(mcp.getOriginY(), vtxWgt);
// VzEff.fill(mcp.getOriginZ(), vtxWgt);
@@ -281,8 +315,9 @@
_nchMCP++;
findableTracks++;
double wgt = 0.;
- if (ntrk > 0)
+ if (ntrk > 0) {
wgt = 1.;
+ }
foundTracks += wgt;
peffFindable.fill(p, wgt);
phieffFindable.fill(phi, wgt);
@@ -295,8 +330,9 @@
Set<FittedRawTrackerHit> fitlist = fittomc.allTo(mcp);
if (debugTrackEfficiency) {
System.out.println(this.getClass().getSimpleName() + ": Missed a findable track with MC p = " + p);
- if (!hasHTHInEachLayer(hitlist, fitlist))
- System.out.println("\t\tThis track failed becasue it's missing a helical track hit");
+ if (!hasHTHInEachLayer(hitlist, fitlist)) {
+ System.out.println("\t\tThis track failed becasue it's missing a helical track hit");
+ }
}
}
@@ -305,8 +341,9 @@
totelectrons++;
// findableelectrons++;
double wgt = 0.;
- if (ntrk > 0)
+ if (ntrk > 0) {
wgt = 1.;
+ }
foundelectrons += wgt;
peffElectrons.fill(p, wgt);
phieffElectrons.fill(phi, wgt);
@@ -349,15 +386,19 @@
}
private boolean hasHTHInEachLayer(Set<HelicalTrackCross> list, Set<FittedRawTrackerHit> fitlist) {
- if(list.size()==0)
+ if (list.isEmpty()) {
return false;
- if(!(list.toArray()[0] instanceof HelicalTrackCross))
+ }
+ if (!(list.toArray()[0] instanceof HelicalTrackCross)) {
return false;
+ }
for (int layer = 1; layer < nlayers - 2; layer += 2) {
- boolean hasThisLayer = false;
- for (HelicalTrackCross hit : list)
- if (hit.Layer() == layer)
+ boolean hasThisLayer = false;
+ for (HelicalTrackCross hit : list) {
+ if (hit.Layer() == layer) {
hasThisLayer = true;
+ }
+ }
if (!hasThisLayer) {
// System.out.println("Missing reconstructed hit in layer = " + layer);
boolean hasFitHitSL1 = false;
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java Thu Jan 22 13:17:07 2015
@@ -1,11 +1,14 @@
package org.hps.analysis.dataquality;
import hep.aida.IHistogram1D;
+import hep.aida.IHistogram2D;
import java.util.Collection;
import java.util.List;
import java.util.Map;
+import org.lcsim.detector.tracker.silicon.HpsSiSensor;
import org.lcsim.event.EventHeader;
import org.lcsim.event.LCRelation;
+import org.lcsim.event.RawTrackerHit;
import org.lcsim.event.RelationalTable;
import org.lcsim.event.Track;
import org.lcsim.event.TrackerHit;
@@ -64,7 +67,9 @@
IHistogram1D trkz0 = aida.histogram1D(plotDir + "z0 ", 25, -1.0, 1.0);
IHistogram1D nHits = aida.histogram1D(plotDir + "Hits per Track", 2, 5, 7);
IHistogram1D trackMeanTime = aida.histogram1D(plotDir + "Mean time of hits on track", 200, -20., 20.);
- IHistogram1D trackRMSTime = aida.histogram1D(plotDir + "RMS time of hits on track", 200, 0., 10.);
+ IHistogram1D trackRMSTime = aida.histogram1D(plotDir + "RMS time of hits on track", 200, 0., 15.);
+ IHistogram2D trackChi2RMSTime = aida.histogram2D(plotDir + "Track chi2 vs. RMS time of hits", 200, 0., 15., 25, 0, 25.0);
+ IHistogram1D seedRMSTime = aida.histogram1D(plotDir + "RMS time of hits on seed layers", 200, 0., 15.);
}
@@ -114,6 +119,9 @@
int nStrips = 0;
double meanTime = 0;
double rmsTime = 0;
+
+ int nSeedStrips = 0;
+ double rmsSeedTime = 0;
for (TrackerHit hit : trk.getTrackerHits()) {
// System.out.format("cross time: %f\n", hit.getTime());
Collection<TrackerHit> htsList = hittostrip.allFrom(hittorotated.from(hit));
@@ -121,14 +129,27 @@
nStrips++;
meanTime += hts.getTime();
rmsTime += hts.getTime() * hts.getTime();
+// rmsTime += Math.abs(hts.getTime());
+
// System.out.format("strip time: %f\n", hts.getTime());
-
+ int layer = ((HpsSiSensor) ((RawTrackerHit) hts.getRawHits().get(0)).getDetectorElement()).getLayerNumber();
+ if (layer <= 6) {
+ nSeedStrips++;
+ rmsSeedTime += hts.getTime() * hts.getTime();
+ }
}
}
meanTime /= nStrips;
+// rmsTime = Math.sqrt(rmsTime / nStrips);
rmsTime = Math.sqrt(rmsTime / nStrips);
aida.histogram1D(plotDir + "Mean time of hits on track").fill(meanTime);
aida.histogram1D(plotDir + "RMS time of hits on track").fill(rmsTime);
+ aida.histogram2D(plotDir + "Track chi2 vs. RMS time of hits").fill(rmsTime, trk.getChi2());
+
+ rmsSeedTime = Math.sqrt(rmsSeedTime/nSeedStrips);
+ aida.histogram1D(plotDir + "RMS time of hits on seed layers").fill(rmsSeedTime);
+// System.out.format("%d seed strips, RMS time %f\n", nSeedStrips, rmsSeedTime);
+
// System.out.format("%d strips, mean time %f, RMS time %f\n", nStrips, meanTime, rmsTime);
}
}
|