Author: [log in to unmask]
Date: Tue Dec 8 14:50:55 2015
New Revision: 4027
Log:
clean up some DQM plots, move GBL stuff around
Modified:
java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/PlotAndFitUtilities.java
java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SvtMonitoring.java
java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java
java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingResiduals.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLKinkData.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutput.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutputDriver.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLRefitterDriver.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/MakeGblTracks.java
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/PlotAndFitUtilities.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/PlotAndFitUtilities.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/PlotAndFitUtilities.java Tue Dec 8 14:50:55 2015
@@ -19,6 +19,7 @@
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.lcsim.detector.tracker.silicon.HpsSiSensor;
import org.lcsim.util.aida.AIDA;
@@ -29,7 +30,7 @@
public class PlotAndFitUtilities {
private static Logger LOGGER = Logger.getLogger(PlotAndFitUtilities.class.getPackage().getName());
-
+
static private AIDA aida = AIDA.defaultInstance();
/*
@@ -37,13 +38,15 @@
* copied from org.hps.monitoring.drivers.ecal.EcalMonitoringUtilities.java
*/
static IPlotter plot(IPlotterFactory plotterFactory, IBaseHistogram histogram, IPlotterStyle style, boolean show) {
- if (style == null)
+ if (style == null) {
style = getPlotterStyle(histogram);
+ }
IPlotter plotter = plotterFactory.create(histogram.title());
plotter.createRegion();
plotter.region(0).plot(histogram, style);
- if (show)
+ if (show) {
plotter.show();
+ }
return plotter;
}
@@ -52,8 +55,9 @@
* copied from org.hps.monitoring.drivers.ecal.EcalMonitoringUtilities.java
*/
static void plot(IPlotter plotter, IBaseHistogram histogram, IPlotterStyle style, int region) {
- if (style == null)
+ if (style == null) {
style = getPlotterStyle(histogram);
+ }
LOGGER.info("Putting plot in region " + region);
plotter.region(region).plot(histogram, style);
@@ -64,8 +68,9 @@
*/
static void plot(IPlotter plotter, IFunction function, IPlotterStyle style, int region) {
- if (style == null)
+ if (style == null) {
style = getPlotterStyle(function);
+ }
LOGGER.info("Putting function in region " + region);
plotter.region(region).plot(function, style);
}
@@ -78,16 +83,17 @@
StyleRegistry styleRegistry = StyleRegistry.getStyleRegistry();
IStyleStore store = styleRegistry.getStore("DefaultStyleStore");
IPlotterStyle style = null;
- if ((histogram instanceof IHistogram1D) || (histogram instanceof ICloud1D) || (histogram instanceof IProfile1D))
+ if ((histogram instanceof IHistogram1D) || (histogram instanceof ICloud1D) || (histogram instanceof IProfile1D)) {
style = store.getStyle("DefaultHistogram1DStyle");
- else if ((histogram instanceof IHistogram2D) || (histogram instanceof IProfile2D)) {
+ } else if ((histogram instanceof IHistogram2D) || (histogram instanceof IProfile2D)) {
style = store.getStyle("DefaultColorMapStyle");
style.statisticsBoxStyle().setVisible(false);
style.setParameter("hist2DStyle", "colorMap");
style.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
}
- if (style == null)
+ if (style == null) {
throw new RuntimeException("A default style could not be found for " + histogram.title());
+ }
//custom stuff...mg
style.dataStyle().errorBarStyle().setVisible(false);
@@ -106,8 +112,9 @@
IStyleStore store = styleRegistry.getStore("DefaultStyleStore");
IPlotterStyle style = null;
style = store.getStyle("DefaultFunctionStyle");
- if (style == null)
+ if (style == null) {
throw new RuntimeException("A default style could not be found for " + func.title());
+ }
return style;
}
@@ -122,10 +129,10 @@
parameters[2] = histogram.rms();
function.setParameters(parameters);
IFitResult fitResult = null;
- Logger minuitLogger = Logger.getLogger("org.freehep.math.minuit");
+ Logger minuitLogger = Logger.getLogger("org.freehep.math.minuit");
minuitLogger.setLevel(Level.OFF);
minuitLogger.info("minuit logger test");
-
+
try {
fitResult = fitter.fit(histogram, function);
} catch (RuntimeException e) {
@@ -142,4 +149,44 @@
}
}
+ private static final String nameStrip = "Tracker_TestRunModule_";
+
+ private static String getNiceSensorName(HpsSiSensor sensor) {
+ return sensor.getName().replaceAll(nameStrip, "")
+ .replace("module", "mod")
+ .replace("layer", "lyr")
+ .replace("sensor", "sens");
+ }
+
+ public static IHistogram1D getSensorPlot(String prefix, HpsSiSensor sensor) {
+ String hname = prefix + getNiceSensorName(sensor);
+ return aida.histogram1D(hname);
+ }
+
+// private static IHistogram1D getSensorPlot(String prefix, String sensorName) {
+// return aida.histogram1D(prefix + sensorName);
+// }
+ public static IHistogram1D createSensorPlot(String prefix, HpsSiSensor sensor, int nchan, double min, double max) {
+ String hname = prefix + getNiceSensorName(sensor);
+ IHistogram1D hist = aida.histogram1D(hname, nchan, min, max);
+ hist.setTitle(getNiceSensorName(sensor));
+
+ return hist;
+ }
+
+ public static IHistogram2D getSensorPlot2D(String prefix, HpsSiSensor sensor) {
+ String hname = prefix + getNiceSensorName(sensor);
+ return aida.histogram2D(hname);
+ }
+
+ public static IHistogram2D createSensorPlot2D(String prefix, HpsSiSensor sensor, int nchanX, double minX, double maxX, int nchanY, double minY, double maxY) {
+ String hname = prefix + getNiceSensorName(sensor);
+ IHistogram2D hist = aida.histogram2D(hname, nchanX, minX, maxX, nchanY, minY, maxY);
+ hist.setTitle(sensor.getName().replaceAll(nameStrip, "")
+ .replace("module", "mod")
+ .replace("layer", "lyr")
+ .replace("sensor", "sens"));
+
+ return hist;
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SvtMonitoring.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SvtMonitoring.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SvtMonitoring.java Tue Dec 8 14:50:55 2015
@@ -38,7 +38,7 @@
*/
//TODO: add some more quantities to DQM database: <t0> or <sigma>_t0 for intime events; <chi^2>, <amplitude> etc
public class SvtMonitoring extends DataQualityMonitor {
-
+
private static Logger LOGGER = Logger.getLogger(SvtMonitoring.class.getPackage().getName());
private String rawTrackerHitCollectionName = "SVTRawTrackerHits";
@@ -90,22 +90,22 @@
aida.tree().cd("/");
for (HpsSiSensor sensor : sensors) {
//IHistogram1D occupancyPlot = aida.histogram1D(sensor.getName().replaceAll("Tracker_TestRunModule_", ""), 640, 0, 639);
- IHistogram1D occupancyPlot = createSensorPlot(plotDir + triggerType + "/"+"occupancy_", sensor, maxChannels, 0, maxChannels - 1);
- IHistogram1D t0Plot = createSensorPlot(plotDir + triggerType + "/"+"t0Hit_", sensor, 400, -100., 100.);
- IHistogram1D nHits = createSensorPlot(plotDir + triggerType + "/"+"nHitsPerEvent_", sensor, 100, -0.5, 99.5);
- IHistogram1D pileup = createSensorPlot(plotDir + triggerType + "/"+"nFitsPerHit_", sensor, 3, 0.5, 3.5);
-
- IHistogram1D amplitudePlot = createSensorPlot(plotDir + triggerType + "/"+"amplitude_", sensor, 50, 0, 4000.0);
- IHistogram2D t0AmpPlot = createSensorPlot2D(plotDir + triggerType + "/"+"t0AmpHit_", sensor, 200, -100., 100., 50, 0, 4000.0);
- IHistogram2D t0ChanPlot = createSensorPlot2D(plotDir + triggerType + "/"+"t0ChanBigHit_", sensor, 640, -0.5, 639.5, 200, -100., 100.);
- IHistogram2D ampChanPlot = createSensorPlot2D(plotDir + triggerType + "/"+"ampChanHit_", sensor, 640, -0.5, 639.5, 50, 0, 4000);
- IHistogram2D chiprobChanPlot = createSensorPlot2D(plotDir + triggerType + "/"+"chiprobChanBigHit_", sensor, 640, -0.5, 639.5, 50, 0, 1.0);
- IHistogram2D t0TrigTimeHitPlot = createSensorPlot2D(plotDir + triggerType + "/"+"t0BigHitTrigTime_", sensor, 400, -100., 100., 6, 0, 24);
-
- IHistogram1D chiProbPlot = createSensorPlot(plotDir + triggerType + "/"+"chiProb_", sensor, 50, 0, 1.0);
- IHistogram1D t0ClusterPlot = createSensorPlot(plotDir + triggerType + "/"+"t0Cluster_", sensor, 400, -100., 100.);
- IHistogram2D t0TrigTimePlot = createSensorPlot2D(plotDir + triggerType + "/"+"t0ClusterTrigTime_", sensor, 400, -100., 100., 6, 0, 24);
- IHistogram1D dedxClusterPlot = createSensorPlot(plotDir + triggerType + "/"+"electrons_", sensor, 50, 0., 10.);
+ IHistogram1D occupancyPlot = PlotAndFitUtilities.createSensorPlot(plotDir + triggerType + "/" + "occupancy_", sensor, maxChannels, 0, maxChannels - 1);
+ IHistogram1D t0Plot = PlotAndFitUtilities.createSensorPlot(plotDir + triggerType + "/" + "t0Hit_", sensor, 400, -100., 100.);
+ IHistogram1D nHits = PlotAndFitUtilities.createSensorPlot(plotDir + triggerType + "/" + "nHitsPerEvent_", sensor, 100, -0.5, 99.5);
+ IHistogram1D pileup = PlotAndFitUtilities.createSensorPlot(plotDir + triggerType + "/" + "nFitsPerHit_", sensor, 3, 0.5, 3.5);
+
+ IHistogram1D amplitudePlot = PlotAndFitUtilities.createSensorPlot(plotDir + triggerType + "/" + "amplitude_", sensor, 50, 0, 4000.0);
+ IHistogram2D t0AmpPlot = PlotAndFitUtilities.createSensorPlot2D(plotDir + triggerType + "/" + "t0AmpHit_", sensor, 200, -100., 100., 50, 0, 4000.0);
+ IHistogram2D t0ChanPlot = PlotAndFitUtilities.createSensorPlot2D(plotDir + triggerType + "/" + "t0ChanBigHit_", sensor, 640, -0.5, 639.5, 200, -100., 100.);
+ IHistogram2D ampChanPlot = PlotAndFitUtilities.createSensorPlot2D(plotDir + triggerType + "/" + "ampChanHit_", sensor, 640, -0.5, 639.5, 50, 0, 4000);
+ IHistogram2D chiprobChanPlot = PlotAndFitUtilities.createSensorPlot2D(plotDir + triggerType + "/" + "chiprobChanBigHit_", sensor, 640, -0.5, 639.5, 50, 0, 1.0);
+ IHistogram2D t0TrigTimeHitPlot = PlotAndFitUtilities.createSensorPlot2D(plotDir + triggerType + "/" + "t0BigHitTrigTime_", sensor, 400, -100., 100., 6, 0, 24);
+
+ IHistogram1D chiProbPlot = PlotAndFitUtilities.createSensorPlot(plotDir + triggerType + "/" + "chiProb_", sensor, 50, 0, 1.0);
+ IHistogram1D t0ClusterPlot = PlotAndFitUtilities.createSensorPlot(plotDir + triggerType + "/" + "t0Cluster_", sensor, 400, -100., 100.);
+ IHistogram2D t0TrigTimePlot = PlotAndFitUtilities.createSensorPlot2D(plotDir + triggerType + "/" + "t0ClusterTrigTime_", sensor, 400, -100., 100., 6, 0, 24);
+ IHistogram1D dedxClusterPlot = PlotAndFitUtilities.createSensorPlot(plotDir + triggerType + "/" + "electrons_", sensor, 50, 0., 10.);
occupancyPlot.reset();
}
@@ -116,10 +116,11 @@
public void process(EventHeader event) {
- //check to see if this event is from the correct trigger (or "all");
- if (!matchTrigger(event))
+ //check to see if this event is from the correct trigger (or "all");
+ if (!matchTrigger(event)) {
return;
-
+ }
+
/* increment the strip occupancy arrays */
Map<String, Integer> hitsPerSensor = new HashMap<String, Integer>();
@@ -140,7 +141,7 @@
++eventCountRaw;
}
for (HpsSiSensor sensor : sensors) {
- IHistogram1D sensorHist = getSensorPlot(plotDir + triggerType + "/"+"nHitsPerEvent_", sensor);
+ IHistogram1D sensorHist = PlotAndFitUtilities.getSensorPlot(plotDir + triggerType + "/" + "nHitsPerEvent_", sensor);
Integer nHits = hitsPerSensor.get(sensor.getName());
if (nHits == null) {
sensorHist.fill(0);
@@ -161,22 +162,22 @@
RawTrackerHit rth = (RawTrackerHit) hit.getFrom();
GenericObject pars = (GenericObject) hit.getTo();
- String sensorName = getNiceSensorName((HpsSiSensor) rth.getDetectorElement());
+ HpsSiSensor sensor = ((HpsSiSensor) rth.getDetectorElement());
//this is a clever way to get the parameters we want from the generic object
double t0 = ShapeFitParameters.getT0(pars);
double amp = ShapeFitParameters.getAmp(pars);
double chiProb = ShapeFitParameters.getChiProb(pars);
int channel = rth.getIdentifierFieldValue("strip");
- getSensorPlot(plotDir + triggerType + "/"+"nFitsPerHit_", sensorName).fill(rthtofit.allFrom(rth).size());
- getSensorPlot(plotDir + triggerType + "/"+"t0Hit_", sensorName).fill(t0);
- getSensorPlot(plotDir + triggerType + "/"+"amplitude_", sensorName).fill(amp);
- getSensorPlot2D(plotDir + triggerType + "/"+"t0AmpHit_", sensorName).fill(t0, amp);
- getSensorPlot(plotDir + triggerType + "/"+"chiProb_", sensorName).fill(chiProb);
- getSensorPlot2D(plotDir + triggerType + "/"+"ampChanHit_", sensorName).fill(channel, amp);
+ PlotAndFitUtilities.getSensorPlot(plotDir + triggerType + "/" + "nFitsPerHit_", sensor).fill(rthtofit.allFrom(rth).size());
+ PlotAndFitUtilities.getSensorPlot(plotDir + triggerType + "/" + "t0Hit_", sensor).fill(t0);
+ PlotAndFitUtilities.getSensorPlot(plotDir + triggerType + "/" + "amplitude_", sensor).fill(amp);
+ PlotAndFitUtilities.getSensorPlot2D(plotDir + triggerType + "/" + "t0AmpHit_", sensor).fill(t0, amp);
+ PlotAndFitUtilities.getSensorPlot(plotDir + triggerType + "/" + "chiProb_", sensor).fill(chiProb);
+ PlotAndFitUtilities.getSensorPlot2D(plotDir + triggerType + "/" + "ampChanHit_", sensor).fill(channel, amp);
if (amp > 1000.0) {
- getSensorPlot2D(plotDir + triggerType + "/"+"t0ChanBigHit_", sensorName).fill(channel, t0);
- getSensorPlot2D(plotDir + triggerType + "/"+"chiprobChanBigHit_", sensorName).fill(channel, chiProb);
- getSensorPlot2D(plotDir + triggerType + "/"+"t0BigHitTrigTime_", sensorName).fill(t0, event.getTimeStamp() % 24);
+ PlotAndFitUtilities.getSensorPlot2D(plotDir + triggerType + "/" + "t0ChanBigHit_", sensor).fill(channel, t0);
+ PlotAndFitUtilities.getSensorPlot2D(plotDir + triggerType + "/" + "chiprobChanBigHit_", sensor).fill(channel, chiProb);
+ PlotAndFitUtilities.getSensorPlot2D(plotDir + triggerType + "/" + "t0BigHitTrigTime_", sensor).fill(t0, event.getTimeStamp() % 24);
}
}
++eventCountFit;
@@ -186,55 +187,15 @@
// LOGGER.info("Found a Si cluster collection");
List<TrackerHit> siClusters = (List<TrackerHit>) event.get(trackerHitCollectionName);
for (TrackerHit cluster : siClusters) {
- String sensorName = getNiceSensorName((HpsSiSensor) ((RawTrackerHit) cluster.getRawHits().get(0)).getDetectorElement());
+ HpsSiSensor sensor = (HpsSiSensor) ((RawTrackerHit) cluster.getRawHits().get(0)).getDetectorElement();
double t0 = cluster.getTime();
double dedx = cluster.getdEdx() * 1e6;
// LOGGER.info("dedx = "+dedx);
- getSensorPlot(plotDir + triggerType + "/"+"t0Cluster_", sensorName).fill(t0);
- getSensorPlot2D(plotDir + triggerType + "/"+"t0ClusterTrigTime_", sensorName).fill(t0, event.getTimeStamp() % 24);
- getSensorPlot(plotDir + triggerType + "/"+"electrons_", sensorName).fill(dedx);
- }
- }
- }
-
- private IHistogram1D getSensorPlot(String prefix, HpsSiSensor sensor) {
- String hname = prefix + getNiceSensorName(sensor);
- return aida.histogram1D(hname);
- }
-
- private IHistogram1D getSensorPlot(String prefix, String sensorName) {
- return aida.histogram1D(prefix + sensorName);
- }
-
- private IHistogram1D createSensorPlot(String prefix, HpsSiSensor sensor, int nchan, double min, double max) {
- String hname = prefix + getNiceSensorName(sensor);
- IHistogram1D hist = aida.histogram1D(hname, nchan, min, max);
- hist.setTitle(sensor.getName().replaceAll(nameStrip, "")
- .replace("module", "mod")
- .replace("layer", "lyr")
- .replace("sensor", "sens"));
-
- return hist;
- }
-
- private IHistogram2D getSensorPlot2D(String prefix, HpsSiSensor sensor) {
- String hname = prefix + getNiceSensorName(sensor);
- return aida.histogram2D(hname);
- }
-
- private IHistogram2D getSensorPlot2D(String prefix, String sensorName) {
- return aida.histogram2D(prefix + sensorName);
- }
-
- private IHistogram2D createSensorPlot2D(String prefix, HpsSiSensor sensor, int nchanX, double minX, double maxX, int nchanY, double minY, double maxY) {
- String hname = prefix + getNiceSensorName(sensor);
- IHistogram2D hist = aida.histogram2D(hname, nchanX, minX, maxX, nchanY, minY, maxY);
- hist.setTitle(sensor.getName().replaceAll(nameStrip, "")
- .replace("module", "mod")
- .replace("layer", "lyr")
- .replace("sensor", "sens"));
-
- return hist;
+ PlotAndFitUtilities.getSensorPlot(plotDir + triggerType + "/" + "t0Cluster_", sensor).fill(t0);
+ PlotAndFitUtilities.getSensorPlot2D(plotDir + triggerType + "/" + "t0ClusterTrigTime_", sensor).fill(t0, event.getTimeStamp() % 24);
+ PlotAndFitUtilities.getSensorPlot(plotDir + triggerType + "/" + "electrons_", sensor).fill(dedx);
+ }
+ }
}
private void resetOccupancyMap() {
@@ -279,7 +240,7 @@
for (HpsSiSensor sensor : sensors) {
Double avg = 0.0;
//IHistogram1D sensorHist = aida.histogram1D(sensor.getName());
- IHistogram1D sensorHist = getSensorPlot(plotDir + triggerType + "/"+"occupancy_", sensor);
+ IHistogram1D sensorHist = PlotAndFitUtilities.getSensorPlot(plotDir + triggerType + "/" + "occupancy_", sensor);
sensorHist.reset();
int[] strips = occupancyMap.get(sensor.getName());
for (int i = 0; i < strips.length; i++) {
@@ -314,7 +275,7 @@
int irTop = 0;
int irBot = 0;
for (HpsSiSensor sensor : sensors) {
- IHistogram1D sensPlot = getSensorPlot(plotDir + triggerType + "/"+"t0Hit_", sensor);
+ IHistogram1D sensPlot = PlotAndFitUtilities.getSensorPlot(plotDir + triggerType + "/" + "t0Hit_", sensor);
IFitResult result = fitGaussian(sensPlot, fitter, "range=\"(-8.0,8.0)\"");
boolean isTop = sensor.isTopLayer();
@@ -362,9 +323,9 @@
@Override
public void printDQMData() {
for (HpsSiSensor sensor : sensors) {
- LOGGER.info(avgOccupancyNames.get(sensor.getName()) + " " +triggerType+" " + avgOccupancyMap.get(sensor.getName()));
- LOGGER.info(avgt0Names.get(sensor.getName()) + " " +triggerType+" " + avgt0Map.get(sensor.getName()));
- LOGGER.info(sigt0Names.get(sensor.getName()) + " " +triggerType+" " + sigt0Map.get(sensor.getName()));
+ LOGGER.info(avgOccupancyNames.get(sensor.getName()) + " " + triggerType + " " + avgOccupancyMap.get(sensor.getName()));
+ LOGGER.info(avgt0Names.get(sensor.getName()) + " " + triggerType + " " + avgt0Map.get(sensor.getName()));
+ LOGGER.info(sigt0Names.get(sensor.getName()) + " " + triggerType + " " + sigt0Map.get(sensor.getName()));
}
}
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 Tue Dec 8 14:50:55 2015
@@ -8,16 +8,17 @@
import hep.physics.vec.BasicHep3Matrix;
import hep.physics.vec.Hep3Vector;
import hep.physics.vec.VecOp;
-
+import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
-
import org.hps.recon.tracking.CoordinateTransformations;
import org.hps.recon.tracking.TrackUtils;
+import org.hps.recon.tracking.gbl.GBLKinkData;
import org.lcsim.detector.tracker.silicon.HpsSiSensor;
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;
@@ -37,7 +38,7 @@
public class TrackingMonitoring extends DataQualityMonitor {
private static Logger LOGGER = Logger.getLogger(SvtMonitoring.class.getPackage().getName());
-
+
private String helicalTrackHitCollectionName = "HelicalTrackHits";
private final String rotatedTrackHitCollectionName = "RotatedHelicalTrackHits";
private final String helicalTrackHitRelationsCollectionName = "HelicalTrackHitRelations";
@@ -64,6 +65,7 @@
private final String botDir = "Bottom/";
private final String hthplotDir = "HelicalTrackHits/";
private final String timeresidDir = "HitTimeResiduals/";
+ private final String kinkDir = "Kinks/";
String[] trackingQuantNames = {"avg_N_tracks", "avg_N_hitsPerTrack", "avg_d0", "avg_z0", "avg_absslope", "avg_chi2"};
int nmodules = 6;
IHistogram1D[] hthTop = new IHistogram1D[nmodules];
@@ -300,9 +302,12 @@
aida.tree().cd("/");
for (HpsSiSensor sensor : sensors) {
//IHistogram1D occupancyPlot = aida.histogram1D(sensor.getName().replaceAll("Tracker_TestRunModule_", ""), 640, 0, 639);
- IHistogram1D hitTimeResidual = createSensorPlot(plotDir + trackCollectionName + "/" + triggerType + "/" + timeresidDir + "hitTimeResidual_", sensor, 100, -20, 20);
- }
-
+ IHistogram1D hitTimeResidual = PlotAndFitUtilities.createSensorPlot(plotDir + trackCollectionName + "/" + triggerType + "/" + timeresidDir + "hitTimeResidual_", sensor, 100, -20, 20);
+ IHistogram1D lambdaKink = PlotAndFitUtilities.createSensorPlot(plotDir + trackCollectionName + "/" + triggerType + "/" + kinkDir + "lambdaKink_", sensor, 100, -5e-3, 5e-3);
+ IHistogram1D phiKink = PlotAndFitUtilities.createSensorPlot(plotDir + trackCollectionName + "/" + triggerType + "/" + kinkDir + "phiKink_", sensor, 100, -5e-3, 5e-3);
+ IHistogram2D lambdaKink2D = PlotAndFitUtilities.createSensorPlot2D(plotDir + trackCollectionName + "/" + triggerType + "/" + kinkDir + "lambdaKinkVsOmega_", sensor, 100, -omegaCut, omegaCut, 100, -5e-3, 5e-3);
+ IHistogram2D phiKink2D = PlotAndFitUtilities.createSensorPlot2D(plotDir + trackCollectionName + "/" + triggerType + "/" + kinkDir + "phiKinkVsOmega_", sensor, 100, -omegaCut, omegaCut, 100, -5e-3, 5e-3);
+ }
}
@Override
@@ -385,7 +390,7 @@
double sinphi0 = Math.sin(trk.getTrackStates().get(0).getPhi());
double omega = trk.getTrackStates().get(0).getOmega();
double lambda = trk.getTrackStates().get(0).getTanLambda();
- double z0 = trk.getTrackStates().get(0).getZ0();
+ double z0 = trk.getTrackStates().get(0).getZ0();
trkChi2.fill(trk.getChi2());
nHits.fill(trk.getTrackerHits().size());
trackNhitsVsChi2.fill(trk.getChi2(), trk.getTrackerHits().size());
@@ -447,8 +452,12 @@
int nSeedStrips = 0;
double meanTime = 0;
double meanSeedTime = 0;
+
+ List<TrackerHit> stripHits = new ArrayList<TrackerHit>();
+
for (TrackerHit hit : trk.getTrackerHits()) {
Collection<TrackerHit> htsList = hitToStrips.allFrom(hitToRotated.from(hit));
+ stripHits.addAll(htsList);
double hitTimes[] = new double[2];
for (TrackerHit hts : htsList) {
int stripLayer = ((HpsSiSensor) ((RawTrackerHit) hts.getRawHits().get(0)).getDetectorElement()).getLayerNumber();
@@ -479,18 +488,16 @@
double rmsTime = 0;
double rmsSeedTime = 0;
- for (TrackerHit hit : trk.getTrackerHits()) {
- Collection<TrackerHit> htsList = hitToStrips.allFrom(hitToRotated.from(hit));
- for (TrackerHit hts : htsList) {
- rmsTime += Math.pow(hts.getTime() - meanTime, 2);
- HpsSiSensor sensor = (HpsSiSensor) ((RawTrackerHit) hts.getRawHits().get(0)).getDetectorElement();
- int layer = sensor.getLayerNumber();
- if (layer <= 6) {
- rmsSeedTime += Math.pow(hts.getTime() - meanSeedTime, 2);
- }
- String sensorName = getNiceSensorName(sensor);
- getSensorPlot(plotDir + trackCollectionName + "/" + triggerType + "/" + timeresidDir + "hitTimeResidual_", sensorName).fill((hts.getTime() - meanTime) * nStrips / (nStrips - 1)); //correct residual for bias
+
+ stripHits = TrackUtils.sortHits(stripHits);
+ for (TrackerHit hts : stripHits) {
+ rmsTime += Math.pow(hts.getTime() - meanTime, 2);
+ HpsSiSensor sensor = (HpsSiSensor) ((RawTrackerHit) hts.getRawHits().get(0)).getDetectorElement();
+ int layer = sensor.getLayerNumber();
+ if (layer <= 6) {
+ rmsSeedTime += Math.pow(hts.getTime() - meanSeedTime, 2);
}
+ PlotAndFitUtilities.getSensorPlot(plotDir + trackCollectionName + "/" + triggerType + "/" + timeresidDir + "hitTimeResidual_", sensor).fill((hts.getTime() - meanTime) * nStrips / (nStrips - 1)); //correct residual for bias
}
rmsTime = Math.sqrt(rmsTime / nStrips);
trackMeanTime.fill(meanTime);
@@ -501,6 +508,23 @@
rmsSeedTime = Math.sqrt(rmsSeedTime / nSeedStrips);
seedRMSTime.fill(rmsSeedTime);
+
+ GenericObject kinkData = GBLKinkData.getKinkData(event, trk);
+ if (kinkData != null) {
+ for (int i = 0; i < stripHits.size(); i++) {
+ TrackerHit hts = stripHits.get(i);
+ HpsSiSensor sensor = (HpsSiSensor) ((RawTrackerHit) hts.getRawHits().get(0)).getDetectorElement();
+// int layer = sensor.getLayerNumber();
+ double lambdaKink = GBLKinkData.getLambdaKink(kinkData, i);
+ double phiKink = GBLKinkData.getPhiKink(kinkData, i);
+// System.out.format("%d %d %f %f\n", i, layer, lambdaKink, phiKink);
+
+ PlotAndFitUtilities.getSensorPlot(plotDir + trackCollectionName + "/" + triggerType + "/" + kinkDir + "lambdaKink_", sensor).fill(lambdaKink);
+ PlotAndFitUtilities.getSensorPlot(plotDir + trackCollectionName + "/" + triggerType + "/" + kinkDir + "phiKink_", sensor).fill(phiKink);
+ PlotAndFitUtilities.getSensorPlot2D(plotDir + trackCollectionName + "/" + triggerType + "/" + kinkDir + "lambdaKinkVsOmega_", sensor).fill(trk.getTrackStates().get(0).getOmega(), lambdaKink);
+ PlotAndFitUtilities.getSensorPlot2D(plotDir + trackCollectionName + "/" + triggerType + "/" + kinkDir + "phiKinkVsOmega_", sensor).fill(trk.getTrackStates().get(0).getOmega(), phiKink);
+ }
+ }
if (trk.getTrackStates().get(0).getOmega() < 0) {//positrons
trkChi2Pos.fill(trk.getChi2());
@@ -568,7 +592,7 @@
for (HpsSiSensor sensor : sensors) {
//IHistogram1D occupancyPlot = aida.histogram1D(sensor.getName().replaceAll("Tracker_TestRunModule_", ""), 640, 0, 639);
- IHistogram1D hitTimeResidual = getSensorPlot(plotDir + trackCollectionName + "/" + triggerType + "/" + timeresidDir + "hitTimeResidual_", getNiceSensorName(sensor));
+ IHistogram1D hitTimeResidual = PlotAndFitUtilities.getSensorPlot(plotDir + trackCollectionName + "/" + triggerType + "/" + timeresidDir + "hitTimeResidual_", sensor);
IFitResult result = fitGaussian(hitTimeResidual, fitter, "range=\"(-20.0,20.0)\"");
if (result != null) {
System.out.format("%s\t%f\t%f\t%d\t%d\t%f\n", getNiceSensorName(sensor), result.fittedParameters()[1], result.fittedParameters()[2], sensor.getFebID(), sensor.getFebHybridID(), sensor.getT0Shift());
@@ -611,26 +635,6 @@
}
}
- private IHistogram1D getSensorPlot(String prefix, HpsSiSensor sensor) {
- String hname = prefix + getNiceSensorName(sensor);
- return aida.histogram1D(hname);
- }
-
- private IHistogram1D getSensorPlot(String prefix, String sensorName) {
- return aida.histogram1D(prefix + sensorName);
- }
-
- private IHistogram1D createSensorPlot(String prefix, HpsSiSensor sensor, int nchan, double min, double max) {
- String hname = prefix + getNiceSensorName(sensor);
- IHistogram1D hist = aida.histogram1D(hname, nchan, min, max);
- hist.setTitle(sensor.getName().replaceAll(nameStrip, "")
- .replace("module", "mod")
- .replace("layer", "lyr")
- .replace("sensor", "sens"));
-
- return hist;
- }
-
private String getNiceSensorName(HpsSiSensor sensor) {
return sensor.getName().replaceAll(nameStrip, "")
.replace("module", "mod")
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingResiduals.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingResiduals.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingResiduals.java Tue Dec 8 14:50:55 2015
@@ -28,8 +28,8 @@
// TODO: Add some quantities for DQM monitoring:
public class TrackingResiduals extends DataQualityMonitor {
- private static Logger LOGGER = Logger.getLogger(TrackingResiduals.class.getPackage().getName());
-
+ private static final Logger LOGGER = Logger.getLogger(TrackingResiduals.class.getPackage().getName());
+
// Collection Names
String trackTimeDataCollectionName = "TrackTimeData";
String trackResidualsCollectionName = "TrackResiduals";
@@ -82,8 +82,9 @@
yresidbot[i - 1] = aida.histogram1D(plotDir + triggerType + "/" + posresDir + "Module " + i + " Bot y Residual", 50, -getRange(i, false), getRange(i, false));
}
- for (int i = 1; i <= nmodules * 2; i++)
+ for (int i = 1; i <= nmodules * 2; i++) {
tresid[i - 1] = aida.histogram1D(plotDir + triggerType + "/" + timeresDir + "HalfModule " + i + " t Residual", 50, -20, 20);
+ }
for (int i = 1; i <= nsensors; i++) {
// IHistogram1D utopresid = aida.histogram1D(plotDir + triggerType + "/"+uresDir + "HalfModule " + i + " Top u Residual", 50, -getRange((i + 1) / 2, false), getRange((i + 1) / 2, false));
// IHistogram1D ubotresid = aida.histogram1D(plotDir + triggerType + "/"+uresDir + "HalfModule " + i + " Bot u Residual", 50, -getRange((i + 1) / 2, false), getRange((i + 1) / 2, false));
@@ -106,17 +107,19 @@
@Override
public void process(EventHeader event) {
aida.tree().cd("/");
- if (!event.hasCollection(GenericObject.class, trackResidualsCollectionName))
+ if (!event.hasCollection(GenericObject.class, trackResidualsCollectionName)) {
return;
+ }
//check to see if this event is from the correct trigger (or "all");
- if (!matchTrigger(event))
+ if (!matchTrigger(event)) {
return;
+ }
nEvents++;
List<GenericObject> trdList = event.get(GenericObject.class, trackResidualsCollectionName);
for (GenericObject trd : trdList) {
int nResid = trd.getNDouble();
int isBot = trd.getIntVal(trd.getNInt() - 1);//last Int is the top/bottom flag
- for (int i = 1; i <= nResid; i++)
+ for (int i = 1; i <= nResid; i++) {
if (isBot == 1) {
xresidbot[i - 1].fill(trd.getDoubleVal(i - 1));//x is the double value in the generic object
yresidbot[i - 1].fill(trd.getFloatVal(i - 1));//y is the float value in the generic object
@@ -124,19 +127,22 @@
xresidtop[i - 1].fill(trd.getDoubleVal(i - 1));//x is the double value in the generic object
yresidtop[i - 1].fill(trd.getFloatVal(i - 1));//y is the float value in the generic object
}
- }
-
+ }
+ }
+
if (event.hasCollection(GenericObject.class, trackTimeDataCollectionName)) {
List<GenericObject> ttdList = event.get(GenericObject.class, trackTimeDataCollectionName);
for (GenericObject ttd : ttdList) {
int nResid = ttd.getNDouble();
- for (int i = 1; i <= nResid; i++)
+ for (int i = 1; i <= nResid; i++) {
tresid[i - 1].fill(ttd.getDoubleVal(i - 1));//x is the double value in the generic object
- }
- }
-
- if (!event.hasCollection(GenericObject.class, gblStripClusterDataCollectionName))
+ }
+ }
+ }
+
+ if (!event.hasCollection(GenericObject.class, gblStripClusterDataCollectionName)) {
return;
+ }
List<GenericObject> gblSCDList = event.get(GenericObject.class, gblStripClusterDataCollectionName);
for (GenericObject gblSCD : gblSCDList) {
double umeas = gblSCD.getDoubleVal(GBLStripClusterData.GBLDOUBLE.UMEAS);//TODO: implement generic methods into GBLStripClusterData so this isn't hard coded
@@ -146,23 +152,25 @@
double tanlambda = gblSCD.getDoubleVal(GBLStripClusterData.GBLDOUBLE.TLAMBDA);//use the slope as a proxy for the top/bottom half of tracker
int i = gblSCD.getIntVal(GBLStripClusterData.GBLINT.ID);//implement generic methods into GBLStripClusterData so this isn't hard coded
- if (i == 666)
- if (tanlambda > 0)
+ if (i == 666) {
+ if (tanlambda > 0) {
xtopresidBS.fill(resid);
- else
+ } else {
xbotresidBS.fill(resid);
- else if (i == 667)
- if (tanlambda > 0)
+ }
+ } else if (i == 667) {
+ if (tanlambda > 0) {
ytopresidBS.fill(resid);
- else
+ } else {
ybotresidBS.fill(resid);
- else if (tanlambda > 0)
+ }
+ } else if (tanlambda > 0) {
utopresid[i - 1].fill(resid);//x is the double value in the generic object
- // aida.histogram2D(plotDir + triggerType + "/"+uresDir + "HalfModule " + i + " Top u Residual vs. u").fill(utrk,resid);//x is the double value in the generic object
+ } // aida.histogram2D(plotDir + triggerType + "/"+uresDir + "HalfModule " + i + " Top u Residual vs. u").fill(utrk,resid);//x is the double value in the generic object
// aida.histogram2D(plotDir + triggerType + "/"+uresDir + "HalfModule " + i + " Top u Residual vs. v").fill(vtrk,resid);//x is the double value in the generic object
- else
+ else {
ubotresid[i - 1].fill(resid);//x is the double value in the generic object
- // aida.histogram2D(plotDir + triggerType + "/"+uresDir + "HalfModule " + i + " Bot u Residual vs. u").fill(utrk,resid);//x is the double value in the generic object
+ } // aida.histogram2D(plotDir + triggerType + "/"+uresDir + "HalfModule " + i + " Bot u Residual vs. u").fill(utrk,resid);//x is the double value in the generic object
// aida.histogram2D(plotDir + triggerType + "/"+uresDir + "HalfModule " + i + " Bot u Residual vs. v").fill(vtrk,resid);//x is the double value in the generic object
}
}
@@ -287,20 +295,25 @@
private String getQuantityName(int itype, int iquant, int top, int nlayer) {
String typeString = "position_resid";
String quantString = "mean_";
- if (itype == 1)
+ if (itype == 1) {
typeString = "time_resid";
- if (iquant == 1)
+ }
+ if (iquant == 1) {
quantString = "sigma_";
+ }
String botString = "bot_";
- if (top == 1)
+ if (top == 1) {
botString = "top_";
- if (top == 2)
+ }
+ if (top == 2) {
botString = "";
+ }
String layerString = "module" + nlayer;
- if (itype == 1)
+ if (itype == 1) {
layerString = "halfmodule" + nlayer;
+ }
return typeString + quantString + botString + layerString;
}
@@ -308,51 +321,71 @@
@Override
public void printDQMData() {
LOGGER.info("TrackingResiduals::printDQMData");
- for (Map.Entry<String, Double> entry : xposTopMeanResidMap.entrySet())
- LOGGER.info(entry.getKey() + " = " + entry.getValue());
- for (Map.Entry<String, Double> entry : xposBotMeanResidMap.entrySet())
- LOGGER.info(entry.getKey() + " = " + entry.getValue());
- for (Map.Entry<String, Double> entry : xposTopSigmaResidMap.entrySet())
- LOGGER.info(entry.getKey() + " = " + entry.getValue());
- for (Map.Entry<String, Double> entry : xposBotSigmaResidMap.entrySet())
- LOGGER.info(entry.getKey() + " = " + entry.getValue());
- for (Map.Entry<String, Double> entry : yposTopMeanResidMap.entrySet())
- LOGGER.info(entry.getKey() + " = " + entry.getValue());
- for (Map.Entry<String, Double> entry : yposBotMeanResidMap.entrySet())
- LOGGER.info(entry.getKey() + " = " + entry.getValue());
- for (Map.Entry<String, Double> entry : yposTopSigmaResidMap.entrySet())
- LOGGER.info(entry.getKey() + " = " + entry.getValue());
- for (Map.Entry<String, Double> entry : yposBotSigmaResidMap.entrySet())
- LOGGER.info(entry.getKey() + " = " + entry.getValue());
- for (Map.Entry<String, Double> entry : timeMeanResidMap.entrySet())
- LOGGER.info(entry.getKey() + " = " + entry.getValue());
- for (Map.Entry<String, Double> entry : timeSigmaResidMap.entrySet())
- LOGGER.info(entry.getKey() + " = " + entry.getValue());
+ for (Map.Entry<String, Double> entry : xposTopMeanResidMap.entrySet()) {
+ LOGGER.info(entry.getKey() + " = " + entry.getValue());
+ }
+ for (Map.Entry<String, Double> entry : xposBotMeanResidMap.entrySet()) {
+ LOGGER.info(entry.getKey() + " = " + entry.getValue());
+ }
+ for (Map.Entry<String, Double> entry : xposTopSigmaResidMap.entrySet()) {
+ LOGGER.info(entry.getKey() + " = " + entry.getValue());
+ }
+ for (Map.Entry<String, Double> entry : xposBotSigmaResidMap.entrySet()) {
+ LOGGER.info(entry.getKey() + " = " + entry.getValue());
+ }
+ for (Map.Entry<String, Double> entry : yposTopMeanResidMap.entrySet()) {
+ LOGGER.info(entry.getKey() + " = " + entry.getValue());
+ }
+ for (Map.Entry<String, Double> entry : yposBotMeanResidMap.entrySet()) {
+ LOGGER.info(entry.getKey() + " = " + entry.getValue());
+ }
+ for (Map.Entry<String, Double> entry : yposTopSigmaResidMap.entrySet()) {
+ LOGGER.info(entry.getKey() + " = " + entry.getValue());
+ }
+ for (Map.Entry<String, Double> entry : yposBotSigmaResidMap.entrySet()) {
+ LOGGER.info(entry.getKey() + " = " + entry.getValue());
+ }
+ for (Map.Entry<String, Double> entry : timeMeanResidMap.entrySet()) {
+ LOGGER.info(entry.getKey() + " = " + entry.getValue());
+ }
+ for (Map.Entry<String, Double> entry : timeSigmaResidMap.entrySet()) {
+ LOGGER.info(entry.getKey() + " = " + entry.getValue());
+ }
LOGGER.info("*******************************");
}
@Override
public void printDQMStrings() {
- for (Map.Entry<String, Double> entry : xposTopMeanResidMap.entrySet())
- LOGGER.info("ALTER TABLE dqm ADD " + entry.getKey() + " double;");
- for (Map.Entry<String, Double> entry : xposBotMeanResidMap.entrySet())
- LOGGER.info("ALTER TABLE dqm ADD " + entry.getKey() + " double;");
- for (Map.Entry<String, Double> entry : xposTopSigmaResidMap.entrySet())
- LOGGER.info("ALTER TABLE dqm ADD " + entry.getKey() + " double;");
- for (Map.Entry<String, Double> entry : xposBotSigmaResidMap.entrySet())
- LOGGER.info("ALTER TABLE dqm ADD " + entry.getKey() + " double;");
- for (Map.Entry<String, Double> entry : yposTopMeanResidMap.entrySet())
- LOGGER.info("ALTER TABLE dqm ADD " + entry.getKey() + " double;");
- for (Map.Entry<String, Double> entry : yposBotMeanResidMap.entrySet())
- LOGGER.info("ALTER TABLE dqm ADD " + entry.getKey() + " double;");
- for (Map.Entry<String, Double> entry : yposTopSigmaResidMap.entrySet())
- LOGGER.info("ALTER TABLE dqm ADD " + entry.getKey() + " double;");
- for (Map.Entry<String, Double> entry : yposBotSigmaResidMap.entrySet())
- LOGGER.info("ALTER TABLE dqm ADD " + entry.getKey() + " double;");
- for (Map.Entry<String, Double> entry : timeMeanResidMap.entrySet())
- LOGGER.info("ALTER TABLE dqm ADD " + entry.getKey() + " double;");
- for (Map.Entry<String, Double> entry : timeSigmaResidMap.entrySet())
- LOGGER.info("ALTER TABLE dqm ADD " + entry.getKey() + " double;");
+ for (Map.Entry<String, Double> entry : xposTopMeanResidMap.entrySet()) {
+ LOGGER.info("ALTER TABLE dqm ADD " + entry.getKey() + " double;");
+ }
+ for (Map.Entry<String, Double> entry : xposBotMeanResidMap.entrySet()) {
+ LOGGER.info("ALTER TABLE dqm ADD " + entry.getKey() + " double;");
+ }
+ for (Map.Entry<String, Double> entry : xposTopSigmaResidMap.entrySet()) {
+ LOGGER.info("ALTER TABLE dqm ADD " + entry.getKey() + " double;");
+ }
+ for (Map.Entry<String, Double> entry : xposBotSigmaResidMap.entrySet()) {
+ LOGGER.info("ALTER TABLE dqm ADD " + entry.getKey() + " double;");
+ }
+ for (Map.Entry<String, Double> entry : yposTopMeanResidMap.entrySet()) {
+ LOGGER.info("ALTER TABLE dqm ADD " + entry.getKey() + " double;");
+ }
+ for (Map.Entry<String, Double> entry : yposBotMeanResidMap.entrySet()) {
+ LOGGER.info("ALTER TABLE dqm ADD " + entry.getKey() + " double;");
+ }
+ for (Map.Entry<String, Double> entry : yposTopSigmaResidMap.entrySet()) {
+ LOGGER.info("ALTER TABLE dqm ADD " + entry.getKey() + " double;");
+ }
+ for (Map.Entry<String, Double> entry : yposBotSigmaResidMap.entrySet()) {
+ LOGGER.info("ALTER TABLE dqm ADD " + entry.getKey() + " double;");
+ }
+ for (Map.Entry<String, Double> entry : timeMeanResidMap.entrySet()) {
+ LOGGER.info("ALTER TABLE dqm ADD " + entry.getKey() + " double;");
+ }
+ for (Map.Entry<String, Double> entry : timeSigmaResidMap.entrySet()) {
+ LOGGER.info("ALTER TABLE dqm ADD " + entry.getKey() + " double;");
+ }
}
private void resetOccupancyMap() {
@@ -399,31 +432,35 @@
private double getRange(int layer, boolean isX) {
double range = 2.5;
if (isX) {
- if (layer == 1)
- return 0.2;
- if (layer == 2)
- return 0.5;
- if (layer == 3)
- return 0.5;
- if (layer == 4)
- return 1.0;
- if (layer == 5)
- return 1.0;
- if (layer == 6)
- return 1.0;
+ switch (layer) {
+ case 1:
+ return 0.2;
+ case 2:
+ return 0.5;
+ case 3:
+ return 0.5;
+ case 4:
+ return 1.0;
+ case 5:
+ return 1.0;
+ case 6:
+ return 1.0;
+ }
} else {
- if (layer == 1)
- return 0.005;
- if (layer == 2)
- return 0.5;
- if (layer == 3)
- return 0.5;
- if (layer == 4)
- return 1.0;
- if (layer == 5)
- return 1.0;
- if (layer == 6)
- return 1.5;
+ switch (layer) {
+ case 1:
+ return 0.005;
+ case 2:
+ return 0.5;
+ case 3:
+ return 0.5;
+ case 4:
+ return 1.0;
+ case 5:
+ return 1.0;
+ case 6:
+ return 1.5;
+ }
}
return range;
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java Tue Dec 8 14:50:55 2015
@@ -317,7 +317,7 @@
}
// Add all collections to the event
- event.put(TrackData.TRACK_DATA_COLLECTION, trackDataCollection, TrackTimeData.class, 0);
+ event.put(TrackData.TRACK_DATA_COLLECTION, trackDataCollection, TrackData.class, 0);
event.put(TrackData.TRACK_DATA_RELATION_COLLECTION, trackDataRelations, LCRelation.class, 0);
event.put(TRK_RESIDUALS_COL_NAME, trackResidualsCollection, TrackResidualsData.class, 0);
event.put(TRK_RESIDUALS_REL_COL_NAME, trackToTrackResidualsRelations, LCRelation.class, 0);
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 Tue Dec 8 14:50:55 2015
@@ -7,6 +7,9 @@
import hep.physics.vec.SpacePoint;
import hep.physics.vec.VecOp;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -1029,6 +1032,20 @@
for (TrackerHit hit : track.getTrackerHits())
hits.addAll(hitToStrips.allFrom(hitToRotated.from(hit)));
return hits;
+ }
+
+ public static List<TrackerHit> sortHits(Collection<TrackerHit> hits) {
+ List<TrackerHit> hitList = new ArrayList<TrackerHit>(hits);
+ Collections.sort(hitList, new LayerComparator());
+ return hitList;
+ }
+
+ private static class LayerComparator implements Comparator<TrackerHit> {
+
+ @Override
+ public int compare(TrackerHit o1, TrackerHit o2) {
+ return Integer.compare(TrackUtils.getLayer(o1), TrackUtils.getLayer(o2));
+ }
}
public static boolean hasSharedStrips(Track track1, Track track2, RelationalTable hitToStrips, RelationalTable hitToRotated) {
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLKinkData.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLKinkData.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLKinkData.java Tue Dec 8 14:50:55 2015
@@ -1,6 +1,13 @@
package org.hps.recon.tracking.gbl;
+import java.util.List;
+import org.apache.commons.math3.util.Pair;
+import org.lcsim.event.EventHeader;
import org.lcsim.event.GenericObject;
+import org.lcsim.event.LCRelation;
+import org.lcsim.event.RelationalTable;
+import org.lcsim.event.Track;
+import org.lcsim.event.base.BaseRelationalTable;
/**
* Generic object used to persist GBL kink data.
@@ -94,4 +101,27 @@
public boolean isFixedSize() {
return true;
}
+
+ private static Pair<EventHeader, RelationalTable> kinkDataToTrackCache = null;
+
+ public static RelationalTable getKinkDataToTrackTable(EventHeader event) {
+ if (kinkDataToTrackCache == null || kinkDataToTrackCache.getFirst() != event) {
+ RelationalTable kinkDataToTrack = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
+ if (event.hasCollection(LCRelation.class, DATA_RELATION_COLLECTION)) {
+ List<LCRelation> relations = event.get(LCRelation.class, DATA_RELATION_COLLECTION);
+ for (LCRelation relation : relations) {
+ if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
+ kinkDataToTrack.add(relation.getFrom(), relation.getTo());
+ }
+ }
+ }
+ kinkDataToTrackCache = new Pair<EventHeader, RelationalTable>(event, kinkDataToTrack);
+ }
+ return kinkDataToTrackCache.getSecond();
+ }
+
+ public static GenericObject getKinkData(EventHeader event, Track track) {
+ return (GenericObject) getKinkDataToTrackTable(event).from(track);
+ }
+
}
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutput.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutput.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutput.java Tue Dec 8 14:50:55 2015
@@ -153,15 +153,13 @@
void printGBL(Track trk, List<SiTrackerHitStrip1D> stripHits, GBLTrackData gtd, List<GBLStripClusterData> stripClusterDataList, List<MCParticle> mcParticles, List<SimTrackerHit> simTrackerHits, boolean isMC) {
- SeedTrack st = (SeedTrack) trk;
- SeedCandidate seed = st.getSeedCandidate();
- HelicalTrackFit htf = seed.getHelix();
+ HelicalTrackFit htf = TrackUtils.getHTF(trk);
// Find scatter points along the path
ScatterPoints scatters = _scattering.FindHPSScatterPoints(htf);
// Hits on track
- List<HelicalTrackHit> hits = seed.getHits();
+ List<TrackerHit> hits = trk.getTrackerHits();
// Find the truth particle of the track
MCParticle mcp = null;
@@ -326,7 +324,7 @@
continue;
}
else {
- hit = hits.get(ihit);
+ hit = (HelicalTrackHit) hits.get(ihit);
htc = (HelicalTrackCross) hit;
strips = htc.getStrips();
correctedHitPosition = hit.getCorrectedPosition();
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutputDriver.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutputDriver.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutputDriver.java Tue Dec 8 14:50:55 2015
@@ -1,32 +1,21 @@
package org.hps.recon.tracking.gbl;
-import hep.physics.vec.BasicHep3Vector;
import hep.physics.vec.Hep3Vector;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
-import java.util.Map;
-import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.hps.recon.tracking.EventQuality;
-import org.hps.recon.tracking.StrategyType;
-import org.hps.recon.tracking.TrackType;
import org.hps.recon.tracking.TrackUtils;
import org.lcsim.event.EventHeader;
import org.lcsim.event.LCRelation;
import org.lcsim.event.MCParticle;
-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.MyLCRelation;
import org.lcsim.geometry.Detector;
-import org.lcsim.lcio.LCIOConstants;
import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
-import org.lcsim.recon.tracking.seedtracker.SeedTrack;
import org.lcsim.util.Driver;
import org.lcsim.util.aida.AIDA;
@@ -58,15 +47,12 @@
private int totalTracksProcessed = 0;
private int iTrack = 0;
private int iEvent = 0;
- private boolean addBeamspot=false;
+ private boolean addBeamspot = false;
private double beamspotScatAngle = 0.000001;
private double beamspotWidthZ = 0.05;
private double beamspotWidthY = 0.15;
- private double beamspotTiltZOverY = 15.0*180.0/Math.PI;
- private double beamspotPosition[] = {0,0,0};
-
-
-
+ private double beamspotTiltZOverY = 15.0 * 180.0 / Math.PI;
+ private double beamspotPosition[] = {0, 0, 0};
public GBLOutputDriver() {
}
@@ -95,7 +81,7 @@
@Override
public void process(EventHeader event) {
- List<Track> tracklist = null;
+ List<Track> tracklist;
if (event.hasCollection(Track.class, trackCollectionName)) {
tracklist = event.get(Track.class, trackCollectionName);
if (_debug > 0) {
@@ -107,7 +93,7 @@
List<SiTrackerHitStrip1D> stripHits = event.get(SiTrackerHitStrip1D.class, "StripClusterer_SiTrackerHitStrip1D");
if (_debug > 0) {
- System.out.printf("%s: Got %d SiTrackerHitStrip1D in this event\n",this.getClass().getSimpleName(), stripHits.size());
+ System.out.printf("%s: Got %d SiTrackerHitStrip1D in this event\n", this.getClass().getSimpleName(), stripHits.size());
}
List<MCParticle> mcParticles = new ArrayList<MCParticle>();
@@ -143,13 +129,13 @@
// Loop over each of the track collections retrieved from the event
for (Track trk : tracklist) {
totalTracks++;
-
- if (_debug > 0) System.out.printf("%s: PX %f bottom %d\n", this.getClass().getSimpleName(), trk.getPX(), TrackUtils.isBottomTrack(trk, 4)?1:0) ;
-
+
+ if (_debug > 0) {
+ System.out.printf("%s: PX %f bottom %d\n", this.getClass().getSimpleName(), trk.getPX(), TrackUtils.isBottomTrack(trk, 4) ? 1 : 0);
+ }
+
//if( trk.getPX() < 0.9) continue;
-
//if( TrackUtils.isBottomTrack(trk, 4)) continue;
-
if (TrackUtils.isGoodTrack(trk, tracklist, EventQuality.Quality.NONE)) {
if (_debug > 0) {
System.out.printf("%s: Print GBL output for this track\n", this.getClass().getSimpleName());
@@ -228,8 +214,8 @@
this.isMC = isMC;
}
- public void setAddBeamspot(boolean add){
- this.addBeamspot=add;
+ public void setAddBeamspot(boolean add) {
+ this.addBeamspot = add;
}
public double getBeamspotScatAngle() {
@@ -271,5 +257,8 @@
public void setBeamspotPosition(double beamspotPosition[]) {
this.beamspotPosition = beamspotPosition;
}
-
+
+ public void setTrackCollectionName(String trackCollectionName) {
+ this.trackCollectionName = trackCollectionName;
+ }
}
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLRefitterDriver.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLRefitterDriver.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLRefitterDriver.java Tue Dec 8 14:50:55 2015
@@ -11,9 +11,11 @@
import org.hps.recon.tracking.MultipleScattering;
import org.hps.recon.tracking.TrackUtils;
import org.lcsim.event.EventHeader;
+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.BaseLCRelation;
import org.lcsim.geometry.Detector;
import org.lcsim.lcio.LCIOConstants;
import org.lcsim.util.Driver;
@@ -66,12 +68,20 @@
RelationalTable hitToRotated = TrackUtils.getHitToRotatedTable(event);
List<Track> refittedTracks = new ArrayList<Track>();
+ List<GBLKinkData> kinkDataCollection = new ArrayList<GBLKinkData>();
+
+ List<LCRelation> kinkDataRelations = new ArrayList<LCRelation>();
Map<Track, Track> inputToRefitted = new HashMap<Track, Track>();
for (Track track : tracks) {
- Pair<Track, GBLKinkData> newTrack = MakeGblTracks.refitTrack(TrackUtils.getHTF(track), TrackUtils.getStripHits(track, hitToStrips, hitToRotated), track.getTrackerHits(), 5, _scattering, bfield);
+ Pair<Track, GBLKinkData> newTrack = MakeGblTracks.refitTrack(TrackUtils.getHTF(track), TrackUtils.getStripHits(track, hitToStrips, hitToRotated), track.getTrackerHits(), 5, track.getType(), _scattering, bfield
+ );
+// newTrack.getFirst().
refittedTracks.add(newTrack.getFirst());
inputToRefitted.put(track, newTrack.getFirst());
+
+ kinkDataCollection.add(newTrack.getSecond());
+ kinkDataRelations.add(new BaseLCRelation(newTrack.getSecond(), newTrack.getFirst()));
}
if (mergeTracks) {
@@ -106,7 +116,7 @@
}
}
- Pair<Track, GBLKinkData> mergedTrack = MakeGblTracks.refitTrack(TrackUtils.getHTF(track), TrackUtils.getStripHits(track, hitToStrips, hitToRotated), allHth, 5, _scattering, bfield);
+ Pair<Track, GBLKinkData> mergedTrack = MakeGblTracks.refitTrack(TrackUtils.getHTF(track), TrackUtils.getStripHits(track, hitToStrips, hitToRotated), allHth, 5, track.getType(), _scattering, bfield);
mergedTracks.add(mergedTrack.getFirst());
// System.out.format("%f %f %f\n", fit.get_chi2(), inputToRefitted.get(track).getChi2(), inputToRefitted.get(otherTrack).getChi2());
// mergedTrackToTrackList.put(mergedTrack, new ArrayList<Track>());
@@ -131,5 +141,7 @@
// Put the tracks back into the event and exit
int flag = 1 << LCIOConstants.TRBIT_HITS;
event.put(outputCollectionName, refittedTracks, Track.class, flag);
+ event.put(GBLKinkData.DATA_COLLECTION, kinkDataCollection, GBLKinkData.class, 0);
+ event.put(GBLKinkData.DATA_RELATION_COLLECTION, kinkDataRelations, LCRelation.class, 0);
}
}
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/MakeGblTracks.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/MakeGblTracks.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/MakeGblTracks.java Tue Dec 8 14:50:55 2015
@@ -146,7 +146,7 @@
double yTPrimeCorr = locPar.get(FittedGblTrajectory.GBLPARIDX.YTPRIME.getValue());
double xTCorr = locPar.get(FittedGblTrajectory.GBLPARIDX.XT.getValue());
double yTCorr = locPar.get(FittedGblTrajectory.GBLPARIDX.YT.getValue());
-
+// System.out.println((helix.slope() > 0 ? "top: " : "bot ") + "qOverPCorr " + qOverPCorr + " xtPrimeCorr " + xTPrimeCorr + " yTPrimeCorr " + yTPrimeCorr + " xTCorr " + xTCorr + " yTCorr " + yTCorr);
LOGGER.info((helix.slope() > 0 ? "top: " : "bot ") + "qOverPCorr " + qOverPCorr + " xtPrimeCorr " + xTPrimeCorr + " yTPrimeCorr " + yTPrimeCorr + " xTCorr " + xTCorr + " yTCorr " + yTCorr);
// calculate new d0 and z0
@@ -275,6 +275,7 @@
if (i > 0) {
lambdaKinks[i - 1] = (float) (newLambda - oldLambda);
phiKinks[i - 1] = newPhi - oldPhi;
+// System.out.println("phikink: " + (newPhi - oldPhi));
}
oldPhi = newPhi;
oldLambda = newLambda;
@@ -298,16 +299,16 @@
* @param bfield B-field
* @return The refitted track.
*/
- public static Pair<Track, GBLKinkData> refitTrack(HelicalTrackFit helix, Collection<TrackerHit> stripHits, Collection<TrackerHit> hth, int nIterations, MultipleScattering scattering, double bfield) {
- List<TrackerHit> allHthList = sortHits(hth);
- List<TrackerHit> sortedStripHits = sortHits(stripHits);
- FittedGblTrajectory fit = MakeGblTracks.doGBLFit(helix, sortedStripHits, scattering, bfield, 0);
+ public static Pair<Track, GBLKinkData> refitTrack(HelicalTrackFit helix, Collection<TrackerHit> stripHits, Collection<TrackerHit> hth, int nIterations, int trackType, MultipleScattering scattering, double bfield) {
+ List<TrackerHit> allHthList = TrackUtils.sortHits(hth);
+ List<TrackerHit> sortedStripHits = TrackUtils.sortHits(stripHits);
+ FittedGblTrajectory fit = doGBLFit(helix, sortedStripHits, scattering, bfield, 0);
for (int i = 0; i < nIterations; i++) {
- Pair<Track, GBLKinkData> newTrack = MakeGblTracks.makeCorrectedTrack(fit, helix, allHthList, 0, bfield);
+ Pair<Track, GBLKinkData> newTrack = makeCorrectedTrack(fit, helix, allHthList, trackType, bfield);
helix = TrackUtils.getHTF(newTrack.getFirst());
- fit = MakeGblTracks.doGBLFit(helix, sortedStripHits, scattering, bfield, 0);
- }
- Pair<Track, GBLKinkData> mergedTrack = MakeGblTracks.makeCorrectedTrack(fit, helix, allHthList, 0, bfield);
+ fit = doGBLFit(helix, sortedStripHits, scattering, bfield, 0);
+ }
+ Pair<Track, GBLKinkData> mergedTrack = makeCorrectedTrack(fit, helix, allHthList, trackType, bfield);
return mergedTrack;
}
@@ -480,18 +481,4 @@
return strip;
}
-
- private static List<TrackerHit> sortHits(Collection<TrackerHit> hits) {
- List<TrackerHit> hitList = new ArrayList<TrackerHit>(hits);
- Collections.sort(hitList, new LayerComparator());
- return hitList;
- }
-
- private static class LayerComparator implements Comparator<TrackerHit> {
-
- @Override
- public int compare(TrackerHit o1, TrackerHit o2) {
- return Integer.compare(TrackUtils.getLayer(o1), TrackUtils.getLayer(o2));
- }
- }
}
|