java/trunk/analysis/src/main/java/org/hps/analysis/dataquality
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SVTHitMCEfficiency.java 2014-09-05 21:36:48 UTC (rev 957)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SVTHitMCEfficiency.java 2014-09-05 22:43:21 UTC (rev 958)
@@ -12,14 +12,14 @@
import org.hps.recon.tracking.ShapeFitParameters;
import org.lcsim.detector.tracker.silicon.SiSensor;
import org.lcsim.event.EventHeader;
+import org.lcsim.event.GenericObject;
import org.lcsim.event.LCRelation;
import org.lcsim.event.RawTrackerHit;
import org.lcsim.event.RelationalTable;
import org.lcsim.event.SimTrackerHit;
+import org.lcsim.event.TrackerHit;
import org.lcsim.event.base.BaseRelationalTable;
import org.lcsim.geometry.Detector;
-import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHit;
-import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
/**
* DQM driver for the monte carlo SVT hit efficiency April 29 -- first pass,
@@ -94,11 +94,11 @@
if (!event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) {
return;
}
- if (!event.hasCollection(FittedRawTrackerHit.class, fittedTrackerHitCollectionName)) {
+ if (!event.hasCollection(LCRelation.class, fittedTrackerHitCollectionName)) {
return;
}
- if (!event.hasCollection(SiTrackerHitStrip1D.class, siClusterCollectionName)) {
+ if (!event.hasCollection(TrackerHit.class, siClusterCollectionName)) {
return;
}
@@ -132,10 +132,10 @@
List<SimTrackerHit> simHits = event.get(SimTrackerHit.class, trackerHitCollectionName);
// make relational table for strip clusters to mc particle
- List<SiTrackerHitStrip1D> siClusters = event.get(SiTrackerHitStrip1D.class, siClusterCollectionName);
+ List<TrackerHit> siClusters = event.get(TrackerHit.class, siClusterCollectionName);
RelationalTable clustertosimhit = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
- for (SiTrackerHit cluster : siClusters) {
- for (RawTrackerHit rth : cluster.getRawHits()) {
+ for (TrackerHit cluster : siClusters) {
+ for (RawTrackerHit rth : (List<RawTrackerHit>) cluster.getRawHits()) {
Set<SimTrackerHit> simTrackerHits = rawtomc.allFrom(rth);
if (simTrackerHits != null) {
for (SimTrackerHit simhit : simTrackerHits) {
@@ -150,31 +150,31 @@
//relational tables from raw and fitted tracker hits to sim hit
RelationalTable rthtofit = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_ONE, RelationalTable.Weighting.UNWEIGHTED);
RelationalTable fittomc = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
- List<FittedRawTrackerHit> fittedTrackerHits = event.get(FittedRawTrackerHit.class, fittedTrackerHitCollectionName);
- for (FittedRawTrackerHit hit : fittedTrackerHits) {
- ShapeFitParameters oldfit = (ShapeFitParameters) rthtofit.to(hit.getRawTrackerHit());
- if (oldfit == null || Math.abs(oldfit.getT0()) > Math.abs(hit.getT0())) {
- rthtofit.add(hit.getRawTrackerHit(), hit.getShapeFitParameters());
+ List<LCRelation> fittedTrackerHits = event.get(LCRelation.class, fittedTrackerHitCollectionName);
+ for (LCRelation hit : fittedTrackerHits) {
+ GenericObject oldfit = (GenericObject) rthtofit.to(FittedRawTrackerHit.getRawTrackerHit(hit));
+ if (oldfit == null || Math.abs(ShapeFitParameters.getT0(oldfit)) > Math.abs(FittedRawTrackerHit.getT0(hit))) {
+ rthtofit.add(FittedRawTrackerHit.getRawTrackerHit(hit), FittedRawTrackerHit.getShapeFitParameters(hit));
}
- Set<SimTrackerHit> simTrackerHits = rawtomc.allFrom(hit.getRawTrackerHit());
+ Set<SimTrackerHit> simTrackerHits = rawtomc.allFrom(FittedRawTrackerHit.getRawTrackerHit(hit));
for (SimTrackerHit simhit : simTrackerHits) {
fittomc.add(hit, simhit);
}
}
for (SimTrackerHit simhit : simHits) {
- Set<FittedRawTrackerHit> fittedRTH = fittomc.allTo(simhit);
- FittedRawTrackerHit signalHit = null;
- for (FittedRawTrackerHit frth : fittedRTH) {
- if (signalHit == null || Math.abs(frth.getT0()) < Math.abs(signalHit.getT0())) {
+ Set<LCRelation> fittedRTH = fittomc.allTo(simhit);
+ LCRelation signalHit = null;
+ for (LCRelation frth : fittedRTH) {
+ if (signalHit == null || Math.abs(FittedRawTrackerHit.getT0(frth)) < Math.abs(FittedRawTrackerHit.getT0(signalHit))) {
signalHit = frth;
}
}
if (signalHit != null) {
// System.out.format("chiprob %f, t0 %f, A %f\n", signalHit.getShapeFitParameters().getChiProb(), signalHit.getT0(), signalHit.getAmp());
- getLayerPlot2D(plotDir + "allFits", simhit.getLayer()).fill(signalHit.getT0(), signalHit.getAmp());
- getLayerPlot2D(plotDir + "fitT0ChiProb", simhit.getLayer()).fill(signalHit.getT0(), signalHit.getShapeFitParameters().getChiProb());
- getLayerPlot2D(plotDir + "fitAmpChiProb", simhit.getLayer()).fill(signalHit.getAmp(), signalHit.getShapeFitParameters().getChiProb());
+ getLayerPlot2D(plotDir + "allFits", simhit.getLayer()).fill(FittedRawTrackerHit.getT0(signalHit), FittedRawTrackerHit.getAmp(signalHit));
+ getLayerPlot2D(plotDir + "fitT0ChiProb", simhit.getLayer()).fill(FittedRawTrackerHit.getT0(signalHit), ShapeFitParameters.getChiProb(FittedRawTrackerHit.getShapeFitParameters(signalHit)));
+ getLayerPlot2D(plotDir + "fitAmpChiProb", simhit.getLayer()).fill(FittedRawTrackerHit.getAmp(signalHit), ShapeFitParameters.getChiProb(FittedRawTrackerHit.getShapeFitParameters(signalHit)));
// if (signalHit.getShapeFitParameters().getChiProb() > 0.95) {
// getLayerPlot2D(plotDir + "toogoodFits", simhit.getLayer()).fill(signalHit.getT0(), signalHit.getAmp());
// } else if (signalHit.getShapeFitParameters().getChiProb() < 0.05) {
@@ -186,9 +186,9 @@
int gotCluster = 0;
int[] gotClusterAtTime = new int[16];
- Set<SiTrackerHitStrip1D> clusters = clustertosimhit.allTo(simhit);
+ Set<TrackerHit> clusters = clustertosimhit.allTo(simhit);
if (clusters != null) {
- for (SiTrackerHitStrip1D clust : clusters) {
+ for (TrackerHit clust : clusters) {
getLayerPlot1D(plotDir + "signalClusterT0", simhit.getLayer()).fill(clust.getTime());
for (int i = 0; i < 16; i++) {
@@ -199,9 +199,9 @@
if (Math.abs(clust.getTime()) < t0Cut) {
gotCluster = 1;
} else {
- for (RawTrackerHit rth : clust.getRawHits()) {
- ShapeFitParameters fit = (ShapeFitParameters) rthtofit.to(rth);
- getLayerPlot2D(plotDir + "badClusterFits", simhit.getLayer()).fill(fit.getT0(), fit.getAmp());
+ 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));
}
}
java/trunk/analysis/src/main/java/org/hps/analysis/dataquality
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java 2014-09-05 21:36:48 UTC (rev 957)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java 2014-09-05 22:43:21 UTC (rev 958)
@@ -1,18 +1,21 @@
package org.hps.analysis.dataquality;
import hep.aida.IHistogram1D;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.lcsim.event.EventHeader;
-import org.lcsim.event.LCIOParameters;
+import org.lcsim.event.LCRelation;
+import org.lcsim.event.RelationalTable;
import org.lcsim.event.Track;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.event.base.BaseRelationalTable;
import org.lcsim.geometry.Detector;
import org.lcsim.geometry.IDDecoder;
/**
- * DQM driver for reconstructed track quantities
- * plots things like number of tracks/event, chi^2, track parameters
- * (d0/z0/theta/phi/curvature)
+ * DQM driver for reconstructed track quantities plots things like number of
+ * tracks/event, chi^2, track parameters (d0/z0/theta/phi/curvature)
*
* @author mgraham on Mar 28, 2014
*/
@@ -20,10 +23,11 @@
public class TrackingMonitoring extends DataQualityMonitor {
private String helicalTrackHitCollectionName = "HelicalTrackHits";
- private String rotatedTrackHitCollectionName = "RotatedHelicalTrackHits";
- private String helicalTrackHitRelationsCollectionName = "HelicalTrackHitRelations";
+ private final String rotatedTrackHitCollectionName = "RotatedHelicalTrackHits";
+ private final String helicalTrackHitRelationsCollectionName = "HelicalTrackHitRelations";
+ private final String rotatedHelicalTrackHitRelationsCollectionName = "RotatedHelicalTrackHitRelations";
private String trackCollectionName = "MatchedTracks";
- private String trackerName = "Tracker";
+ private final String trackerName = "Tracker";
String ecalSubdetectorName = "Ecal";
String ecalCollectionName = "EcalClusters";
private Detector detector = null;
@@ -35,7 +39,7 @@
double sumz0 = 0;
double sumslope = 0;
double sumchisq = 0;
- private String plotDir = "Tracks/";
+ private final String plotDir = "Tracks/";
String[] trackingQuantNames = {"avg_N_tracks", "avg_N_hitsPerTrack", "avg_d0", "avg_z0", "avg_absslope", "avg_chi2"};
public void setHelicalTrackHitCollectionName(String helicalTrackHitCollectionName) {
@@ -51,14 +55,16 @@
this.detector = detector;
aida.tree().cd("/");
- IHistogram1D trkChi2 = aida.histogram1D(plotDir+"Track Chi2", 25, 0, 25.0);
- IHistogram1D nTracks = aida.histogram1D(plotDir+"Tracks per Event", 6, 0, 6);
- IHistogram1D trkd0 = aida.histogram1D(plotDir+"d0 ", 25, -5.0, 5.0);
- IHistogram1D trkphi = aida.histogram1D(plotDir+"sinphi ", 25, -0.2, 0.2);
- IHistogram1D trkomega = aida.histogram1D(plotDir+"omega ", 25, -0.00025, 0.00025);
- IHistogram1D trklam = aida.histogram1D(plotDir+"tan(lambda) ", 25, -0.1, 0.1);
- IHistogram1D trkz0 = aida.histogram1D(plotDir+"z0 ", 25, -1.0, 1.0);
- IHistogram1D nHits = aida.histogram1D(plotDir+"Hits per Track", 2, 5, 7);
+ IHistogram1D trkChi2 = aida.histogram1D(plotDir + "Track Chi2", 25, 0, 25.0);
+ IHistogram1D nTracks = aida.histogram1D(plotDir + "Tracks per Event", 6, 0, 6);
+ IHistogram1D trkd0 = aida.histogram1D(plotDir + "d0 ", 25, -5.0, 5.0);
+ IHistogram1D trkphi = aida.histogram1D(plotDir + "sinphi ", 25, -0.2, 0.2);
+ IHistogram1D trkomega = aida.histogram1D(plotDir + "omega ", 25, -0.00025, 0.00025);
+ IHistogram1D trklam = aida.histogram1D(plotDir + "tan(lambda) ", 25, -0.1, 0.1);
+ 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.);
}
@@ -66,29 +72,64 @@
public void process(EventHeader event) {
aida.tree().cd("/");
-
+
+ RelationalTable hittostrip = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
+ List<LCRelation> hitrelations = event.get(LCRelation.class, helicalTrackHitRelationsCollectionName);
+ 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, rotatedHelicalTrackHitRelationsCollectionName);
+ for (LCRelation relation : rotaterelations) {
+ if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
+ hittorotated.add(relation.getFrom(), relation.getTo());
+ }
+ }
+
if (!event.hasCollection(Track.class, trackCollectionName)) {
- aida.histogram1D(plotDir+"Tracks per Event").fill(0);
+ aida.histogram1D(plotDir + "Tracks per Event").fill(0);
return;
}
nEvents++;
List<Track> tracks = event.get(Track.class, trackCollectionName);
nTotTracks += tracks.size();
- aida.histogram1D(plotDir+"Tracks per Event").fill(tracks.size());
+ aida.histogram1D(plotDir + "Tracks per Event").fill(tracks.size());
for (Track trk : tracks) {
nTotHits += trk.getTrackerHits().size();
- aida.histogram1D(plotDir+"Track Chi2").fill(trk.getChi2());
- aida.histogram1D(plotDir+"Hits per Track").fill(trk.getTrackerHits().size());
- //why is getTrackParameter depricated? How am I supposed to get this?
- aida.histogram1D(plotDir+"d0 ").fill(trk.getTrackParameter(LCIOParameters.ParameterName.d0.ordinal()));
- aida.histogram1D(plotDir+"sinphi ").fill(Math.sin(trk.getTrackParameter(LCIOParameters.ParameterName.phi0.ordinal())));
- aida.histogram1D(plotDir+"omega ").fill(trk.getTrackParameter(LCIOParameters.ParameterName.omega.ordinal()));
- aida.histogram1D(plotDir+"tan(lambda) ").fill(trk.getTrackParameter(LCIOParameters.ParameterName.tanLambda.ordinal()));
- aida.histogram1D(plotDir+"z0 ").fill(trk.getTrackParameter(LCIOParameters.ParameterName.z0.ordinal()));
- sumd0 += trk.getTrackParameter(LCIOParameters.ParameterName.d0.ordinal());
- sumz0 += trk.getTrackParameter(LCIOParameters.ParameterName.z0.ordinal());
- sumslope += Math.abs(trk.getTrackParameter(LCIOParameters.ParameterName.tanLambda.ordinal()));
+ aida.histogram1D(plotDir + "Track Chi2").fill(trk.getChi2());
+ aida.histogram1D(plotDir + "Hits per Track").fill(trk.getTrackerHits().size());
+ aida.histogram1D(plotDir + "d0 ").fill(trk.getTrackStates().get(0).getD0());
+ aida.histogram1D(plotDir + "sinphi ").fill(Math.sin(trk.getTrackStates().get(0).getPhi()));
+ aida.histogram1D(plotDir + "omega ").fill(trk.getTrackStates().get(0).getOmega());
+ aida.histogram1D(plotDir + "tan(lambda) ").fill(trk.getTrackStates().get(0).getTanLambda());
+ aida.histogram1D(plotDir + "z0 ").fill(trk.getTrackStates().get(0).getZ0());
+ sumd0 += trk.getTrackStates().get(0).getD0();
+ sumz0 += trk.getTrackStates().get(0).getZ0();
+ sumslope += Math.abs(trk.getTrackStates().get(0).getTanLambda());
sumchisq += trk.getChi2();
+
+ int nStrips = 0;
+ double meanTime = 0;
+ double rmsTime = 0;
+ for (TrackerHit hit : trk.getTrackerHits()) {
+// System.out.format("cross time: %f\n", hit.getTime());
+ Collection<TrackerHit> htsList = hittostrip.allFrom(hittorotated.from(hit));
+ for (TrackerHit hts : htsList) {
+ nStrips++;
+ meanTime += hts.getTime();
+ rmsTime += hts.getTime() * hts.getTime();
+// System.out.format("strip time: %f\n", hts.getTime());
+
+ }
+ }
+ meanTime /= 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);
+// System.out.format("%d strips, mean time %f, RMS time %f\n", nStrips, meanTime, rmsTime);
}
}
@@ -102,20 +143,19 @@
monitoredQuantityMap.put(trackingQuantNames[5], sumchisq / nTotTracks);
}
-
@Override
public void printDQMData() {
System.out.println("ReconMonitoring::printDQMData");
- for (Map.Entry<String, Double> entry : monitoredQuantityMap.entrySet())
+ for (Map.Entry<String, Double> entry : monitoredQuantityMap.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
+ }
System.out.println("*******************************");
}
@Override
public void printDQMStrings() {
- for (Map.Entry<String, Double> entry : monitoredQuantityMap.entrySet())
- System.out.println("ALTER TABLE dqm ADD "+entry.getKey()+" double;");
-
+ for (Map.Entry<String, Double> entry : monitoredQuantityMap.entrySet()) {
+ System.out.println("ALTER TABLE dqm ADD " + entry.getKey() + " double;");
+ }
}
-
}