Author: [log in to unmask]
Date: Wed Dec 9 17:34:41 2015
New Revision: 4040
Log:
pull changes from trunk into my branch
Added:
java/branches/nathan-dev/detector-data/detectors/HPS-PhysicsRun2016-6pt6-v0/
- copied from r4039, java/trunk/detector-data/detectors/HPS-PhysicsRun2016-6pt6-v0/
java/branches/nathan-dev/recon/src/main/java/org/hps/recon/filtering/SvtHitMultiplicityFilter.java
- copied unchanged from r4039, java/trunk/recon/src/main/java/org/hps/recon/filtering/SvtHitMultiplicityFilter.java
java/branches/nathan-dev/steering-files/src/main/resources/org/hps/steering/production/FilterHitsPerSensor.lcsim
- copied unchanged from r4039, java/trunk/steering-files/src/main/resources/org/hps/steering/production/FilterHitsPerSensor.lcsim
java/branches/nathan-dev/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015STRecon.lcsim
- copied unchanged from r4039, java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015STRecon.lcsim
java/branches/nathan-dev/steering-files/src/main/resources/org/hps/steering/users/meeg/TridentMCSkim.lcsim
- copied unchanged from r4039, java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/TridentMCSkim.lcsim
java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/SvtPlotUtils.java
- copied unchanged from r4039, java/trunk/tracking/src/main/java/org/hps/recon/tracking/SvtPlotUtils.java
java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/straight/
- copied from r4039, java/trunk/tracking/src/main/java/org/hps/recon/tracking/straight/
Removed:
java/branches/nathan-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtPlotUtils.java
java/branches/nathan-dev/steering-files/src/main/resources/org/hps/steering/users/phansson/HitRecon.lcsim
java/branches/nathan-dev/users/src/main/java/org/hps/users/phansson/STUtils.java
java/branches/nathan-dev/users/src/main/java/org/hps/users/phansson/StraightThroughAnalysisDriver.java
Modified:
java/branches/nathan-dev/ (props changed)
java/branches/nathan-dev/analysis/src/main/java/org/hps/analysis/dataquality/PlotAndFitUtilities.java
java/branches/nathan-dev/analysis/src/main/java/org/hps/analysis/dataquality/SvtMonitoring.java
java/branches/nathan-dev/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java
java/branches/nathan-dev/analysis/src/main/java/org/hps/analysis/dataquality/TrackingResiduals.java
java/branches/nathan-dev/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java
java/branches/nathan-dev/detector-model/src/main/java/org/lcsim/detector/tracker/silicon/HpsSiSensor.java
java/branches/nathan-dev/detector-model/src/test/java/org/hps/detector/svt/SvtDetectorSetupTest.java
java/branches/nathan-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/PedestalPlots.java
java/branches/nathan-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SampleZeroHVBiasChecker.java
java/branches/nathan-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SensorOccupancyPlotsDriver.java
java/branches/nathan-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtClusterPlots.java
java/branches/nathan-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtHitPlots.java
java/branches/nathan-dev/parent/pom.xml
java/branches/nathan-dev/steering-files/src/main/resources/org/hps/steering/monitoring/SvtOnlineMonitoring.lcsim
java/branches/nathan-dev/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim
java/branches/nathan-dev/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC.lcsim
java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/HelicalTrackHitDriver.java
java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java
java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java
java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java
java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLKinkData.java
java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutput.java
java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutputDriver.java
java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLRefitterDriver.java
java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/MakeGblTracks.java
java/branches/nathan-dev/users/src/main/java/org/hps/users/meeg/TridentMCFilter.java
Modified: java/branches/nathan-dev/analysis/src/main/java/org/hps/analysis/dataquality/PlotAndFitUtilities.java
=============================================================================
--- java/branches/nathan-dev/analysis/src/main/java/org/hps/analysis/dataquality/PlotAndFitUtilities.java (original)
+++ java/branches/nathan-dev/analysis/src/main/java/org/hps/analysis/dataquality/PlotAndFitUtilities.java Wed Dec 9 17:34:41 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/branches/nathan-dev/analysis/src/main/java/org/hps/analysis/dataquality/SvtMonitoring.java
=============================================================================
--- java/branches/nathan-dev/analysis/src/main/java/org/hps/analysis/dataquality/SvtMonitoring.java (original)
+++ java/branches/nathan-dev/analysis/src/main/java/org/hps/analysis/dataquality/SvtMonitoring.java Wed Dec 9 17:34:41 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/branches/nathan-dev/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java
=============================================================================
--- java/branches/nathan-dev/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java (original)
+++ java/branches/nathan-dev/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java Wed Dec 9 17:34:41 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/branches/nathan-dev/analysis/src/main/java/org/hps/analysis/dataquality/TrackingResiduals.java
=============================================================================
--- java/branches/nathan-dev/analysis/src/main/java/org/hps/analysis/dataquality/TrackingResiduals.java (original)
+++ java/branches/nathan-dev/analysis/src/main/java/org/hps/analysis/dataquality/TrackingResiduals.java Wed Dec 9 17:34:41 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/branches/nathan-dev/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java
=============================================================================
--- java/branches/nathan-dev/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java (original)
+++ java/branches/nathan-dev/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java Wed Dec 9 17:34:41 2015
@@ -97,8 +97,8 @@
private final String plotDir = "TridentMonitoring/";
- private IHistogram2D triTrackTime2D;
- private IHistogram1D triTrackTimeDiff;
+// private IHistogram2D triTrackTime2D;
+// private IHistogram1D triTrackTimeDiff;
private IHistogram2D triMassMomentum;
private IHistogram2D triZVsMomentum;
private IHistogram2D triTrackMomentum2D;
@@ -108,22 +108,22 @@
private IHistogram1D triSumP;
private IHistogram1D triMass;
private IHistogram2D triZVsMass;
- private IHistogram1D triX;
- private IHistogram1D triY;
- private IHistogram1D triZ;
- private IHistogram2D triZY;
- private IHistogram2D triXY;
- private IHistogram1D triPx;
- private IHistogram1D triPy;
- private IHistogram1D triPz;
- private IHistogram2D triPxPy;
- private IHistogram1D triU;
- private IHistogram1D triV;
+// private IHistogram1D triX;
+// private IHistogram1D triY;
+// private IHistogram1D triZ;
+// private IHistogram2D triZY;
+// private IHistogram2D triXY;
+// private IHistogram1D triPx;
+// private IHistogram1D triPy;
+// private IHistogram1D triPz;
+// private IHistogram2D triPxPy;
+// private IHistogram1D triU;
+// private IHistogram1D triV;
private IHistogram2D triRadTrackTime2D;
private IHistogram1D triRadTrackTimeDiff;
- private IHistogram2D triRadMassMomentum;
- private IHistogram2D triRadZVsMomentum;
+// private IHistogram2D triRadMassMomentum;
+// private IHistogram2D triRadZVsMomentum;
private IHistogram2D triRadTrackMomentum2D;
private IHistogram2D triRadPyEleVsPyPos;
private IHistogram2D triRadPxEleVsPxPos;
@@ -131,11 +131,11 @@
private IHistogram1D triRadSumP;
private IHistogram1D triRadMass;
private IHistogram2D triRadZVsMass;
- private IHistogram1D triRadX;
- private IHistogram1D triRadY;
- private IHistogram1D triRadZ;
- private IHistogram2D triRadZY;
- private IHistogram2D triRadXY;
+// private IHistogram1D triRadX;
+// private IHistogram1D triRadY;
+// private IHistogram1D triRadZ;
+// private IHistogram2D triRadZY;
+// private IHistogram2D triRadXY;
private IHistogram1D triRadPx;
private IHistogram1D triRadPy;
private IHistogram1D triRadPz;
@@ -143,8 +143,8 @@
private IHistogram1D triRadU;
private IHistogram1D triRadV;
- private IHistogram2D vertTrackTime2D;
- private IHistogram1D vertTrackTimeDiff;
+// private IHistogram2D vertTrackTime2D;
+// private IHistogram1D vertTrackTimeDiff;
private IHistogram2D vertMassMomentum;
private IHistogram2D vertZVsMomentum;
private IHistogram2D vertTrackMomentum2D;
@@ -154,17 +154,17 @@
private IHistogram1D vertSumP;
private IHistogram1D vertMass;
private IHistogram2D vertZVsMass;
- private IHistogram1D vertX;
- private IHistogram1D vertY;
- private IHistogram1D vertZ;
- private IHistogram2D vertZY;
- private IHistogram2D vertXY;
- private IHistogram1D vertPx;
- private IHistogram1D vertPy;
- private IHistogram1D vertPz;
- private IHistogram2D vertPxPy;
- private IHistogram1D vertU;
- private IHistogram1D vertV;
+// private IHistogram1D vertX;
+// private IHistogram1D vertY;
+// private IHistogram1D vertZ;
+// private IHistogram2D vertZY;
+// private IHistogram2D vertXY;
+// private IHistogram1D vertPx;
+// private IHistogram1D vertPy;
+// private IHistogram1D vertPz;
+// private IHistogram2D vertPxPy;
+// private IHistogram1D vertU;
+// private IHistogram1D vertV;
private IHistogram2D vertRadTrackTime2D;
private IHistogram1D vertRadTrackTimeDiff;
@@ -284,9 +284,8 @@
// IHistogram1D tarconChi2 = aida.histogram1D(plotDir + triggerType + "/"+ triggerType + "/"+"Target Constrained Chi2", 25, 0, 25);
nTriCand = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Number of Trident Candidates", 5, 0, 4);
- triTrackTimeDiff = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Track time difference", 100, -10, 10);
- triTrackTime2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Track time vs. track time", 100, -10, 10, 100, -10, 10);
-
+// triTrackTimeDiff = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Track time difference", 100, -10, 10);
+// triTrackTime2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Track time vs. track time", 100, -10, 10, 100, -10, 10);
triTrackMomentum2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Positron vs. electron momentum", 100, 0, v0PzMax, 100, 0, v0PzMax);
triDeltaP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Positron - electron momentum", 100, -1., 1.0);
triSumP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Positron + electron momentum", 100, v0PzMin, v0PzMax);
@@ -297,17 +296,17 @@
triZVsMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Z vs. vertex momentum", 100, v0PzMin, v0PzMax, 100, -v0VzMax, v0VzMax);
triMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex mass", 100, 0, 0.11);
triZVsMass = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Z vs. mass", 100, 0, 0.11, 100, -v0VzMax, v0VzMax);
- triX = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex X", 100, -v0VxMax, v0VxMax);
- triY = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Y", 100, -v0VyMax, v0VyMax);
- triZ = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Z", 100, -v0VzMax, v0VzMax);
- triXY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Y vs. X", 100, -v0VxMax, v0VxMax, 100, -v0VyMax, v0VyMax);
- triZY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Z vs. Y", 100, -v0VyMax, v0VyMax, 100, -v0VzMax, v0VzMax);
- triPx = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Px", 100, -v0PxMax, v0PxMax);
- triPy = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Py", 100, -v0PyMax, v0PyMax);
- triPz = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Pz", 100, v0PzMin, v0PzMax);
- triPxPy = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Py vs. Px", 100, -v0PxMax, v0PxMax, 100, -v0PyMax, v0PyMax);
- triU = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Px over Ptot", 100, -0.1, 0.1);
- triV = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Py over Ptot", 100, -0.1, 0.1);
+// triX = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex X", 100, -v0VxMax, v0VxMax);
+// triY = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Y", 100, -v0VyMax, v0VyMax);
+// triZ = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Z", 100, -v0VzMax, v0VzMax);
+// triXY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Y vs. X", 100, -v0VxMax, v0VxMax, 100, -v0VyMax, v0VyMax);
+// triZY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Z vs. Y", 100, -v0VyMax, v0VyMax, 100, -v0VzMax, v0VzMax);
+// triPx = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Px", 100, -v0PxMax, v0PxMax);
+// triPy = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Py", 100, -v0PyMax, v0PyMax);
+// triPz = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Pz", 100, v0PzMin, v0PzMax);
+// triPxPy = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Py vs. Px", 100, -v0PxMax, v0PxMax, 100, -v0PyMax, v0PyMax);
+// triU = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Px over Ptot", 100, -0.1, 0.1);
+// triV = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Py over Ptot", 100, -0.1, 0.1);
triRadTrackTimeDiff = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Track time difference", 100, -10, 10);
triRadTrackTime2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Track time vs. track time", 100, -10, 10, 100, -10, 10);
@@ -318,15 +317,15 @@
triRadPyEleVsPyPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Py(e) vs Py(p)", 50, -0.04, 0.04, 50, -0.04, 0.04);
triRadPxEleVsPxPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Px(e) vs Px(p)", 50, -0.04, 0.04, 50, -0.04, 0.04);
- triRadMassMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex mass vs. vertex momentum", 100, v0PzMin, v0PzMax, 100, 0, 0.1);
- triRadZVsMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Z vs. vertex momentum", 100, v0PzMin, v0PzMax, 100, -v0VzMax, v0VzMax);
+// triRadMassMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex mass vs. vertex momentum", 100, v0PzMin, v0PzMax, 100, 0, 0.1);
+// triRadZVsMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Z vs. vertex momentum", 100, v0PzMin, v0PzMax, 100, -v0VzMax, v0VzMax);
triRadMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex mass", 100, 0, 0.11);
triRadZVsMass = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Z vs. mass", 100, 0, 0.11, 100, -v0VzMax, v0VzMax);
- triRadX = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex X", 100, -v0VxMax, v0VxMax);
- triRadY = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Y", 100, -v0VyMax, v0VyMax);
- triRadZ = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Z", 100, -v0VzMax, v0VzMax);
- triRadXY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Y vs. X", 100, -v0VxMax, v0VxMax, 100, -v0VyMax, v0VyMax);
- triRadZY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Z vs. Y", 100, -v0VyMax, v0VyMax, 100, -v0VzMax, v0VzMax);
+// triRadX = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex X", 100, -v0VxMax, v0VxMax);
+// triRadY = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Y", 100, -v0VyMax, v0VyMax);
+// triRadZ = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Z", 100, -v0VzMax, v0VzMax);
+// triRadXY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Y vs. X", 100, -v0VxMax, v0VxMax, 100, -v0VyMax, v0VyMax);
+// triRadZY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Z vs. Y", 100, -v0VyMax, v0VyMax, 100, -v0VzMax, v0VzMax);
triRadPx = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Px", 100, -v0PxMax, v0PxMax);
triRadPy = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Py", 100, -v0PyMax, v0PyMax);
triRadPz = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Pz", 100, v0PzMin, v0PzMax);
@@ -334,9 +333,8 @@
triRadU = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Px over Ptot", 100, -0.1, 0.1);
triRadV = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Py over Ptot", 100, -0.1, 0.1);
- vertTrackTimeDiff = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Track time difference", 100, -10, 10);
- vertTrackTime2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Track time vs. track time", 100, -10, 10, 100, -10, 10);
-
+// vertTrackTimeDiff = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Track time difference", 100, -10, 10);
+// vertTrackTime2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Track time vs. track time", 100, -10, 10, 100, -10, 10);
vertTrackMomentum2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Positron vs. electron momentum", 100, 0, v0PzMax, 100, 0, v0PzMax);
vertDeltaP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Positron - electron momentum", 100, -1., 1.0);
vertSumP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Positron + electron momentum", 100, v0PzMin, v0PzMax);
@@ -347,17 +345,17 @@
vertZVsMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Z vs. vertex momentum", 100, v0PzMin, v0PzMax, 100, -v0VzMax, v0VzMax);
vertMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex mass", 100, 0, 0.11);
vertZVsMass = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Z vs. mass", 100, 0, 0.11, 100, -v0VzMax, v0VzMax);
- vertX = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex X", 100, -v0VxMax, v0VxMax);
- vertY = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Y", 100, -v0VyMax, v0VyMax);
- vertZ = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Z", 100, -v0VzMax, v0VzMax);
- vertXY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Y vs. X", 100, -v0VxMax, v0VxMax, 100, -v0VyMax, v0VyMax);
- vertZY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Z vs. Y", 100, -v0VyMax, v0VyMax, 100, -v0VzMax, v0VzMax);
- vertPx = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Px", 100, -v0PxMax, v0PxMax);
- vertPy = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Py", 100, -v0PyMax, v0PyMax);
- vertPz = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Pz", 100, v0PzMin, v0PzMax);
- vertPxPy = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Py vs. Px", 100, -v0PxMax, v0PxMax, 100, -v0PyMax, v0PyMax);
- vertU = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Px over Ptot", 100, -0.1, 0.1);
- vertV = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Py over Ptot", 100, -0.1, 0.1);
+// vertX = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex X", 100, -v0VxMax, v0VxMax);
+// vertY = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Y", 100, -v0VyMax, v0VyMax);
+// vertZ = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Z", 100, -v0VzMax, v0VzMax);
+// vertXY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Y vs. X", 100, -v0VxMax, v0VxMax, 100, -v0VyMax, v0VyMax);
+// vertZY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Z vs. Y", 100, -v0VyMax, v0VyMax, 100, -v0VzMax, v0VzMax);
+// vertPx = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Px", 100, -v0PxMax, v0PxMax);
+// vertPy = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Py", 100, -v0PyMax, v0PyMax);
+// vertPz = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Pz", 100, v0PzMin, v0PzMax);
+// vertPxPy = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Py vs. Px", 100, -v0PxMax, v0PxMax, 100, -v0PyMax, v0PyMax);
+// vertU = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Px over Ptot", 100, -0.1, 0.1);
+// vertV = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Py over Ptot", 100, -0.1, 0.1);
vertRadTrackTimeDiff = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Track time difference", 100, -10, 10);
vertRadTrackTime2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Track time vs. track time", 100, -10, 10, 100, -10, 10);
@@ -407,11 +405,11 @@
for (Cut cut : Cut.values()) {
for (int i = 0; i < 2; i++) {
- cutVertexZ[cut.ordinal()][i] = aida.histogram1D(String.format("%s%s%s/failed cut: %s/%s: Vertex Z position (mm)", plotDir, trkType, triggerType, cut.ordinal(), cut.name, i == VERTEX ? "vertex" : "trident"),
+ cutVertexZ[cut.ordinal()][i] = aida.histogram1D(String.format("%s%s%s/failed cut %d: %s/%s: Vertex Z position (mm)", plotDir, trkType, triggerType, cut.ordinal(), cut.name, i == VERTEX ? "vertex" : "trident"),
100, -v0VzMax, v0VzMax);
- cutVertexMass[cut.ordinal()][i] = aida.histogram1D(String.format("%s%s%s/failed cut: %s/%s: Vertex mass (GeV)", plotDir, trkType, triggerType, cut.ordinal(), cut.name, i == VERTEX ? "vertex" : "trident"),
+ cutVertexMass[cut.ordinal()][i] = aida.histogram1D(String.format("%s%s%s/failed cut %d: %s/%s: Vertex mass (GeV)", plotDir, trkType, triggerType, cut.ordinal(), cut.name, i == VERTEX ? "vertex" : "trident"),
100, 0, 0.1 * ebeam);
- cutVertexZVsMass[cut.ordinal()][i] = aida.histogram2D(String.format("%s%s%s/failed cut: %s/%s: Vertex Z vs. mass", plotDir, trkType, triggerType, cut.ordinal(), cut.name, i == VERTEX ? "vertex" : "trident"),
+ cutVertexZVsMass[cut.ordinal()][i] = aida.histogram2D(String.format("%s%s%s/failed cut %d: %s/%s: Vertex Z vs. mass", plotDir, trkType, triggerType, cut.ordinal(), cut.name, i == VERTEX ? "vertex" : "trident"),
100, 0, 0.1 * ebeam, 100, -v0VzMax, v0VzMax);
}
}
@@ -520,15 +518,11 @@
EnumSet<Cut> bits = EnumSet.noneOf(Cut.class);
boolean trackQualityCut = Math.max(tracks.get(0).getChi2(), tracks.get(1).getChi2()) < (isGBL ? maxChi2GBLTrack : maxChi2SeedTrack);
- maxTrkChi2.fill(Math.max(tracks.get(0).getChi2(), tracks.get(1).getChi2()));
- zVsMaxTrkChi2.fill(Math.max(tracks.get(0).getChi2(), tracks.get(1).getChi2()), v0Vtx.z());
if (trackQualityCut) {
bits.add(Cut.TRK_QUALITY);
}
boolean v0QualityCut = uncVert.getChi2() < maxVertChi2;
- v0Chi2.fill(uncVert.getChi2());
- zVsV0Chi2.fill(uncVert.getChi2(), v0Vtx.z());
if (v0QualityCut) {
bits.add(Cut.VTX_QUALITY);
}
@@ -540,10 +534,6 @@
}
boolean trackTimeDiffCut = Math.abs(trackTimes.get(0) - trackTimes.get(1)) < trkTimeDiff;
- trackTimeDiff.fill(Math.abs(trackTimes.get(0) - trackTimes.get(1)));
- hitTimeStdDev.fill(stdDev);
- zVsTrackTimeDiff.fill(Math.abs(trackTimes.get(0) - trackTimes.get(1)), v0Vtx.z());
- zVsHitTimeStdDev.fill(stdDev, v0Vtx.z());
if (trackTimeDiffCut) {
bits.add(Cut.TIMING);
}
@@ -557,16 +547,13 @@
boolean clusterMatchCut = !electron.getClusters().isEmpty() && !positron.getClusters().isEmpty();
boolean clusterTimeCut = clusterMatchCut && Math.abs(ClusterUtilities.getSeedHitTime(electron.getClusters().get(0)) - ClusterUtilities.getSeedHitTime(positron.getClusters().get(0))) < clusterTimeDiffCut;
- if (clusterMatchCut && clusterTimeCut) {
- bits.add(Cut.CLUSTER_CUTS);
- }
+//disable cut for now
+// if (clusterMatchCut && clusterTimeCut) {
+ bits.add(Cut.CLUSTER_CUTS);
+// }
boolean eventTrkCountCut = ntrk >= 2 && ntrk <= nTrkMax;
boolean eventPosCountCut = npos >= 1 && npos <= nPosMax;
- eventTrkCount.fill(ntrk);
- eventPosCount.fill(npos);
- zVsEventTrkCount.fill(ntrk, v0Vtx.z());
- zVsEventPosCount.fill(npos, v0Vtx.z());
if (eventTrkCountCut && eventPosCountCut) {
bits.add(Cut.EVENT_QUALITY);
}
@@ -576,10 +563,8 @@
bits.add(Cut.FRONT_HITS);
}
- l1Iso.fill(minL1Iso);
- zVsL1Iso.fill(minL1Iso, v0Vtx.z());
boolean isoCut = minL1Iso > l1IsoMin;
- if (isoCut) {
+ if (!frontHitsCut || isoCut) { //diagnostic plots look better if failing the front hits cut makes you pass this one
bits.add(Cut.ISOLATION);
}
@@ -597,22 +582,54 @@
for (Cut cut : Cut.values()) {
EnumSet<Cut> allButThisCut = EnumSet.allOf(Cut.class);
allButThisCut.remove(cut);
- if (bits.equals(allButThisCut)) {
+ if (bits.containsAll(allButThisCut)) {
if (uncV0.getMass() > plotsMinMass && uncV0.getMass() < plotsMaxMass) {
- cutVertexZ[cut.ordinal()][VERTEX].fill(v0Vtx.z());
+ switch (cut) {
+ case ISOLATION:
+ l1Iso.fill(minL1Iso);
+ zVsL1Iso.fill(minL1Iso, v0Vtx.z());
+ break;
+ case EVENT_QUALITY:
+ eventTrkCount.fill(ntrk);
+ eventPosCount.fill(npos);
+ zVsEventTrkCount.fill(ntrk, v0Vtx.z());
+ zVsEventPosCount.fill(npos, v0Vtx.z());
+ break;
+ case TIMING:
+ trackTimeDiff.fill(Math.abs(trackTimes.get(0) - trackTimes.get(1)));
+ hitTimeStdDev.fill(stdDev);
+ zVsTrackTimeDiff.fill(Math.abs(trackTimes.get(0) - trackTimes.get(1)), v0Vtx.z());
+ zVsHitTimeStdDev.fill(stdDev, v0Vtx.z());
+ break;
+ case VTX_QUALITY:
+ v0Chi2.fill(uncVert.getChi2());
+ zVsV0Chi2.fill(uncVert.getChi2(), v0Vtx.z());
+ break;
+ case TRK_QUALITY:
+ maxTrkChi2.fill(Math.max(tracks.get(0).getChi2(), tracks.get(1).getChi2()));
+ zVsMaxTrkChi2.fill(Math.max(tracks.get(0).getChi2(), tracks.get(1).getChi2()), v0Vtx.z());
+ break;
+ }
}
- cutVertexMass[cut.ordinal()][VERTEX].fill(uncV0.getMass());
- cutVertexZVsMass[cut.ordinal()][VERTEX].fill(uncV0.getMass(), v0Vtx.z());
+ if (!bits.contains(cut)) {
+ if (uncV0.getMass() > plotsMinMass && uncV0.getMass() < plotsMaxMass) {
+ cutVertexZ[cut.ordinal()][VERTEX].fill(v0Vtx.z());
+ }
+ cutVertexMass[cut.ordinal()][VERTEX].fill(uncV0.getMass());
+ cutVertexZVsMass[cut.ordinal()][VERTEX].fill(uncV0.getMass(), v0Vtx.z());
+ }
}
EnumSet<Cut> allTriCutsButThisCut = EnumSet.range(Cut.values()[0], Cut.values()[Cut.firstVertexingCut - 1]);
allTriCutsButThisCut.remove(cut);
- if (bits.containsAll(allTriCutsButThisCut) && !bits.contains(cut)) {
- if (uncV0.getMass() > plotsMinMass && uncV0.getMass() < plotsMaxMass) {
- cutVertexZ[cut.ordinal()][TRIDENT].fill(v0Vtx.z());
+ if (bits.containsAll(allTriCutsButThisCut)) {
+ if (!bits.contains(cut)) {
+ if (uncV0.getMass() > plotsMinMass && uncV0.getMass() < plotsMaxMass) {
+ cutVertexZ[cut.ordinal()][TRIDENT].fill(v0Vtx.z());
+ }
+ cutVertexMass[cut.ordinal()][TRIDENT].fill(uncV0.getMass());
+ cutVertexZVsMass[cut.ordinal()][TRIDENT].fill(uncV0.getMass(), v0Vtx.z());
}
- cutVertexMass[cut.ordinal()][TRIDENT].fill(uncV0.getMass());
- cutVertexZVsMass[cut.ordinal()][TRIDENT].fill(uncV0.getMass(), v0Vtx.z());
}
}
@@ -645,8 +662,8 @@
Hep3Vector pPosRot = VecOp.mult(beamAxisRotation, positron.getMomentum());
Hep3Vector v0Vtx = VecOp.mult(beamAxisRotation, bestCandidate.getStartVertex().getPosition());
- triTrackTime2D.fill(tEle, tPos);
- triTrackTimeDiff.fill(tEle - tPos);
+// triTrackTime2D.fill(tEle, tPos);
+// triTrackTimeDiff.fill(tEle - tPos);
triZVsMomentum.fill(bestCandidate.getMomentum().magnitude(), v0Vtx.z());
triMassMomentum.fill(bestCandidate.getMomentum().magnitude(), bestCandidate.getMass());
triTrackMomentum2D.fill(electron.getMomentum().magnitude(), positron.getMomentum().magnitude());
@@ -655,24 +672,24 @@
triSumP.fill(bestCandidate.getMomentum().magnitude());
triDeltaP.fill(positron.getMomentum().magnitude() - electron.getMomentum().magnitude());
- triPxPy.fill(pBestV0Rot.x(), pBestV0Rot.y());
+// triPxPy.fill(pBestV0Rot.x(), pBestV0Rot.y());
triMass.fill(bestCandidate.getMass());
triZVsMass.fill(bestCandidate.getMass(), v0Vtx.z());
- triX.fill(v0Vtx.x());
- triY.fill(v0Vtx.y());
- triZ.fill(v0Vtx.z());
- triPx.fill(pBestV0Rot.x());
- triPy.fill(pBestV0Rot.y());
- triPz.fill(pBestV0Rot.z());
- triU.fill(pBestV0Rot.x() / pBestV0Rot.magnitude());
- triV.fill(pBestV0Rot.y() / pBestV0Rot.magnitude());
- triXY.fill(v0Vtx.x(), v0Vtx.y());
- triZY.fill(v0Vtx.y(), v0Vtx.z());
+// triX.fill(v0Vtx.x());
+// triY.fill(v0Vtx.y());
+// triZ.fill(v0Vtx.z());
+// triPx.fill(pBestV0Rot.x());
+// triPy.fill(pBestV0Rot.y());
+// triPz.fill(pBestV0Rot.z());
+// triU.fill(pBestV0Rot.x() / pBestV0Rot.magnitude());
+// triV.fill(pBestV0Rot.y() / pBestV0Rot.magnitude());
+// triXY.fill(v0Vtx.x(), v0Vtx.y());
+// triZY.fill(v0Vtx.y(), v0Vtx.z());
if (bestCandidate.getMomentum().magnitude() > radCut) {
triRadTrackTime2D.fill(tEle, tPos);
triRadTrackTimeDiff.fill(tEle - tPos);
- triRadZVsMomentum.fill(bestCandidate.getMomentum().magnitude(), v0Vtx.z());
- triRadMassMomentum.fill(bestCandidate.getMomentum().magnitude(), bestCandidate.getMass());
+// triRadZVsMomentum.fill(bestCandidate.getMomentum().magnitude(), v0Vtx.z());
+// triRadMassMomentum.fill(bestCandidate.getMomentum().magnitude(), bestCandidate.getMass());
triRadTrackMomentum2D.fill(electron.getMomentum().magnitude(), positron.getMomentum().magnitude());
triRadPyEleVsPyPos.fill(pEleRot.y(), pPosRot.y());
triRadPxEleVsPxPos.fill(pEleRot.x(), pPosRot.x());
@@ -682,16 +699,16 @@
triRadPxPy.fill(pBestV0Rot.x(), pBestV0Rot.y());
triRadMass.fill(bestCandidate.getMass());
triRadZVsMass.fill(bestCandidate.getMass(), v0Vtx.z());
- triRadX.fill(v0Vtx.x());
- triRadY.fill(v0Vtx.y());
- triRadZ.fill(v0Vtx.z());
+// triRadX.fill(v0Vtx.x());
+// triRadY.fill(v0Vtx.y());
+// triRadZ.fill(v0Vtx.z());
triRadPx.fill(pBestV0Rot.x());
triRadPy.fill(pBestV0Rot.y());
triRadPz.fill(pBestV0Rot.z());
triRadU.fill(pBestV0Rot.x() / pBestV0Rot.magnitude());
triRadV.fill(pBestV0Rot.y() / pBestV0Rot.magnitude());
- triRadXY.fill(v0Vtx.x(), v0Vtx.y());
- triRadZY.fill(v0Vtx.y(), v0Vtx.z());
+// triRadXY.fill(v0Vtx.x(), v0Vtx.y());
+// triRadZY.fill(v0Vtx.y(), v0Vtx.z());
}
}
@@ -713,8 +730,8 @@
Hep3Vector pPosRot = VecOp.mult(beamAxisRotation, positron.getMomentum());
Hep3Vector v0Vtx = VecOp.mult(beamAxisRotation, bestCandidate.getStartVertex().getPosition());
- vertTrackTime2D.fill(tEle, tPos);
- vertTrackTimeDiff.fill(tEle - tPos);
+// vertTrackTime2D.fill(tEle, tPos);
+// vertTrackTimeDiff.fill(tEle - tPos);
vertZVsMomentum.fill(bestCandidate.getMomentum().magnitude(), v0Vtx.z());
vertMassMomentum.fill(bestCandidate.getMomentum().magnitude(), bestCandidate.getMass());
vertTrackMomentum2D.fill(electron.getMomentum().magnitude(), positron.getMomentum().magnitude());
@@ -723,19 +740,19 @@
vertSumP.fill(bestCandidate.getMomentum().magnitude());
vertDeltaP.fill(positron.getMomentum().magnitude() - electron.getMomentum().magnitude());
- vertPxPy.fill(pBestV0Rot.x(), pBestV0Rot.y());
+// vertPxPy.fill(pBestV0Rot.x(), pBestV0Rot.y());
vertMass.fill(bestCandidate.getMass());
vertZVsMass.fill(bestCandidate.getMass(), v0Vtx.z());
- vertX.fill(v0Vtx.x());
- vertY.fill(v0Vtx.y());
- vertZ.fill(v0Vtx.z());
- vertPx.fill(pBestV0Rot.x());
- vertPy.fill(pBestV0Rot.y());
- vertPz.fill(pBestV0Rot.z());
- vertU.fill(pBestV0Rot.x() / pBestV0Rot.magnitude());
- vertV.fill(pBestV0Rot.y() / pBestV0Rot.magnitude());
- vertXY.fill(v0Vtx.x(), v0Vtx.y());
- vertZY.fill(v0Vtx.y(), v0Vtx.z());
+// vertX.fill(v0Vtx.x());
+// vertY.fill(v0Vtx.y());
+// vertZ.fill(v0Vtx.z());
+// vertPx.fill(pBestV0Rot.x());
+// vertPy.fill(pBestV0Rot.y());
+// vertPz.fill(pBestV0Rot.z());
+// vertU.fill(pBestV0Rot.x() / pBestV0Rot.magnitude());
+// vertV.fill(pBestV0Rot.y() / pBestV0Rot.magnitude());
+// vertXY.fill(v0Vtx.x(), v0Vtx.y());
+// vertZY.fill(v0Vtx.y(), v0Vtx.z());
if (bestCandidate.getMomentum().magnitude() > radCut) {
vertRadTrackTime2D.fill(tEle, tPos);
vertRadTrackTimeDiff.fill(tEle - tPos);
Modified: java/branches/nathan-dev/detector-model/src/main/java/org/lcsim/detector/tracker/silicon/HpsSiSensor.java
=============================================================================
--- java/branches/nathan-dev/detector-model/src/main/java/org/lcsim/detector/tracker/silicon/HpsSiSensor.java (original)
+++ java/branches/nathan-dev/detector-model/src/main/java/org/lcsim/detector/tracker/silicon/HpsSiSensor.java Wed Dec 9 17:34:41 2015
@@ -449,6 +449,8 @@
buffer.append("\n");
buffer.append("----------------------------------");
buffer.append("\n");
+ buffer.append("Feb ID: " + this.getFebID() + "\n");
+ buffer.append("Feb Hybrid ID: " + this.getFebHybridID() + "\n");
buffer.append("Layer: " + this.getLayerNumber() + "\n");
buffer.append("Module: " + this.getModuleNumber() + "\n");
buffer.append("Number of readout strips: " + this.getReadoutElectrodes(ChargeCarrier.HOLE).getNCells() + "\n");
Modified: java/branches/nathan-dev/detector-model/src/test/java/org/hps/detector/svt/SvtDetectorSetupTest.java
=============================================================================
--- java/branches/nathan-dev/detector-model/src/test/java/org/hps/detector/svt/SvtDetectorSetupTest.java (original)
+++ java/branches/nathan-dev/detector-model/src/test/java/org/hps/detector/svt/SvtDetectorSetupTest.java Wed Dec 9 17:34:41 2015
@@ -63,7 +63,8 @@
final DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
conditionsManager.addConditionsListener(new SvtDetectorSetup());
- conditionsManager.setDetector("HPS-Proposal2014-v7-2pt2", 0);
+ //conditionsManager.setDetector("HPS-Proposal2014-v7-2pt2", 0);
+ conditionsManager.setDetector("HPS-EngRun2015-Nominal-v3", 5772);
// Get the detector.
final Detector detector = conditionsManager.getCachedConditions(Detector.class, "compact.xml").getCachedData();
Modified: java/branches/nathan-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/PedestalPlots.java
=============================================================================
--- java/branches/nathan-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/PedestalPlots.java (original)
+++ java/branches/nathan-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/PedestalPlots.java Wed Dec 9 17:34:41 2015
@@ -23,6 +23,7 @@
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.hps.recon.tracking.SvtPlotUtils;
//===> import org.hps.conditions.deprecated.HPSSVTCalibrationConstants;
//===> import org.hps.conditions.deprecated.SvtUtils;
import org.lcsim.detector.tracker.silicon.HpsSiSensor;
Modified: java/branches/nathan-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SampleZeroHVBiasChecker.java
=============================================================================
--- java/branches/nathan-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SampleZeroHVBiasChecker.java (original)
+++ java/branches/nathan-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SampleZeroHVBiasChecker.java Wed Dec 9 17:34:41 2015
@@ -28,6 +28,7 @@
import org.hps.conditions.svt.SvtBiasMyaDataReader;
import org.hps.conditions.svt.SvtBiasMyaDataReader.SvtBiasMyaRange;
import org.hps.conditions.svt.SvtBiasMyaDataReader.SvtBiasRunRange;
+import org.hps.recon.tracking.SvtPlotUtils;
import org.hps.record.epics.EpicsData;
import org.hps.record.triggerbank.AbstractIntData;
import org.hps.record.triggerbank.HeadBankData;
Modified: java/branches/nathan-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SensorOccupancyPlotsDriver.java
=============================================================================
--- java/branches/nathan-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SensorOccupancyPlotsDriver.java (original)
+++ java/branches/nathan-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SensorOccupancyPlotsDriver.java Wed Dec 9 17:34:41 2015
@@ -36,6 +36,7 @@
import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
import org.lcsim.recon.tracking.digitization.sisim.TrackerHitType;
import org.lcsim.util.Driver;
+import org.hps.recon.tracking.SvtPlotUtils;
import org.hps.record.triggerbank.AbstractIntData;
import org.hps.record.triggerbank.TIData;
import org.lcsim.util.aida.AIDA;
Modified: java/branches/nathan-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtClusterPlots.java
=============================================================================
--- java/branches/nathan-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtClusterPlots.java (original)
+++ java/branches/nathan-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtClusterPlots.java Wed Dec 9 17:34:41 2015
@@ -16,6 +16,7 @@
import hep.aida.jfree.plotter.Plotter;
import hep.aida.jfree.plotter.PlotterRegion;
import hep.aida.ref.rootwriter.RootFileStore;
+
import java.util.HashSet;
import java.util.Set;
@@ -25,8 +26,8 @@
import org.lcsim.geometry.Detector;
import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
import org.lcsim.util.Driver;
-
import org.hps.recon.tracking.FittedRawTrackerHit;
+import org.hps.recon.tracking.SvtPlotUtils;
import org.lcsim.detector.tracker.silicon.DopedSilicon;
import org.lcsim.util.aida.AIDA;
Modified: java/branches/nathan-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtHitPlots.java
=============================================================================
--- java/branches/nathan-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtHitPlots.java (original)
+++ java/branches/nathan-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtHitPlots.java Wed Dec 9 17:34:41 2015
@@ -2,6 +2,7 @@
import hep.aida.IAnalysisFactory;
import hep.aida.IHistogram1D;
+import hep.aida.IHistogram2D;
import hep.aida.IHistogramFactory;
import hep.aida.IPlotter;
import hep.aida.IPlotterFactory;
@@ -9,18 +10,19 @@
import hep.aida.ITree;
import hep.aida.jfree.plotter.Plotter;
import hep.aida.jfree.plotter.PlotterRegion;
-
+import hep.aida.ref.rootwriter.RootFileStore;
+
+import java.io.IOException;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
-
+
+import org.hps.recon.tracking.SvtPlotUtils;
import org.lcsim.detector.tracker.silicon.HpsSiSensor;
-import org.lcsim.util.Driver;
-import org.lcsim.geometry.Detector;
import org.lcsim.event.EventHeader;
import org.lcsim.event.RawTrackerHit;
+import org.lcsim.geometry.Detector;
+import org.lcsim.util.Driver;
import org.lcsim.util.aida.AIDA;
/**
@@ -28,6 +30,8 @@
* event.
*
* @author Omar Moreno <[log in to unmask]>
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
*/
public class SvtHitPlots extends Driver {
@@ -49,6 +53,8 @@
private static Map<String, IHistogram1D> layersHitPlots = new HashMap<String, IHistogram1D>();
private static Map<String, IHistogram1D> hitCountPlots = new HashMap<String, IHistogram1D>();
private static Map<String, IHistogram1D> firstSamplePlots = new HashMap<String, IHistogram1D>();
+ private static Map<String, IHistogram1D> firstSamplePlotsNoise = new HashMap<String, IHistogram1D>();
+ private static Map<String, IHistogram2D> firstSamplePlotsNoisePerChannel = new HashMap<String, IHistogram2D>();
private List<HpsSiSensor> sensors;
@@ -62,10 +68,23 @@
double totalBotHitCount = 0;
private boolean dropSmallHitEvents = true;
+ private static final boolean debug = false;
+ private boolean doPerChannelSamplePlots = false;
+ private boolean saveRootFile = false;
+ private String outputRootFilename = "";
public void setDropSmallHitEvents(boolean dropSmallHitEvents) {
this.dropSmallHitEvents = dropSmallHitEvents;
}
+
+ public void setDoPerChannelsSampleplots(boolean val) {
+ doPerChannelSamplePlots = val;
+ }
+
+ public void setSaveRootFile(boolean save) {
+ saveRootFile = save;
+ }
+
private int computePlotterRegion(HpsSiSensor sensor) {
@@ -137,6 +156,9 @@
for (HpsSiSensor sensor : sensors) {
hitsPerSensorPlots.get(sensor.getName()).reset();
firstSamplePlots.get(sensor.getName()).reset();
+ firstSamplePlotsNoise.get(sensor.getName()).reset();
+ if(doPerChannelSamplePlots)
+ firstSamplePlotsNoisePerChannel.get(sensor.getName()).reset();
}
for (IHistogram1D histogram : layersHitPlots.values()) {
@@ -203,11 +225,34 @@
plotters.put("First sample distributions (pedestal shifts)", plotterFactory.create("First sample distributions (pedestal shifts)"));
plotters.get("First sample distributions (pedestal shifts)").createRegions(6, 6);
+
+ plotters.put("First sample distributions (pedestal shifts, MAX_SAMPLE>=4)", plotterFactory.create("First sample distributions (pedestal shifts, MAX_SAMPLE>=4)"));
+ plotters.get("First sample distributions (pedestal shifts, MAX_SAMPLE>=4)").createRegions(6, 6);
+
+ if(doPerChannelSamplePlots) {
+ plotters.put("First sample channel distributions (pedestal shifts, MAX_SAMPLE>=4)", plotterFactory.create("First sample channel distributions (pedestal shifts, MAX_SAMPLE>=4)"));
+ plotters.get("First sample channel distributions (pedestal shifts, MAX_SAMPLE>=4)").createRegions(6, 6);
+ }
+
+
for (HpsSiSensor sensor : sensors) {
firstSamplePlots.put(sensor.getName(),
histogramFactory.createHistogram1D(sensor.getName() + " - first sample", 100, -500.0, 2000.0));
plotters.get("First sample distributions (pedestal shifts)").region(this.computePlotterRegion(sensor))
.plot(firstSamplePlots.get(sensor.getName()), this.createStyle(sensor, "First sample - pedestal [ADC counts]", ""));
+ firstSamplePlotsNoise.put(sensor.getName(),
+ histogramFactory.createHistogram1D(sensor.getName() + " - first sample (MAX_SAMPLE>=4)", 100, -500.0, 2000.0));
+ plotters.get("First sample distributions (pedestal shifts, MAX_SAMPLE>=4)").region(this.computePlotterRegion(sensor))
+ .plot(firstSamplePlotsNoise.get(sensor.getName()), this.createStyle(sensor, "First sample - pedestal (MAX_SAMPLE>=4) [ADC counts]", ""));
+
+ if( doPerChannelSamplePlots ) {
+ firstSamplePlotsNoisePerChannel.put(sensor.getName(),
+ histogramFactory.createHistogram2D(sensor.getName() + " channels - first sample (MAX_SAMPLE>=4)", 640, -0.5,639.5, 20, -500.0, 500.0));
+ plotters.get("First sample channel distributions (pedestal shifts, MAX_SAMPLE>=4)").region(this.computePlotterRegion(sensor))
+ .plot(firstSamplePlotsNoisePerChannel.get(sensor.getName()), this.createStyle(sensor, "First sample channels - pedestal (MAX_SAMPLE>=4) [ADC counts]", ""));
+ }
+
+
}
for (IPlotter plotter : plotters.values()) {
@@ -228,8 +273,15 @@
return;
}
+ if(debug && ((int) eventCount % 100 == 0) )
+ System.out.println(this.getClass().getSimpleName() + ": processed " + String.valueOf(eventCount) + " events");
+
eventCount++;
-
+
+
+ if(outputRootFilename.isEmpty())
+ outputRootFilename = "run" + String.valueOf( event.getRunNumber());
+
// Get RawTrackerHit collection from event.
List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
@@ -240,8 +292,28 @@
this.clearHitMaps();
for (RawTrackerHit rawHit : rawHits) {
HpsSiSensor sensor = (HpsSiSensor) rawHit.getDetectorElement();
+ int channel = rawHit.getIdentifierFieldValue("strip");
+ double pedestal = sensor.getPedestal(channel,0);
+ // Find the sample with maximum ADC count
+ int maxSample = 0;
+ double maxSampleValue = 0;
+ for (int s = 0; s < 6; ++s) {
+ if (((double) rawHit.getADCValues()[s] - pedestal) > maxSampleValue) {
+ maxSample = s;
+ maxSampleValue = ((double) rawHit.getADCValues()[s]) - pedestal;
+ }
+ }
+
hitsPerSensor.get(sensor.getName())[0]++;
- firstSamplePlots.get(sensor.getName()).fill(rawHit.getADCValues()[0] - sensor.getPedestal(rawHit.getIdentifierFieldValue("strip"), 0));
+ firstSamplePlots.get(sensor.getName()).fill(rawHit.getADCValues()[0] - pedestal);
+ if (maxSample >= 4) {
+ firstSamplePlotsNoise.get(sensor.getName()).fill(rawHit.getADCValues()[0] - pedestal);
+
+ if( doPerChannelSamplePlots ) {
+ firstSamplePlotsNoisePerChannel.get(sensor.getName()).fill(channel, rawHit.getADCValues()[0] - pedestal);
+ }
+
+ }
}
int[] topLayersHit = new int[12];
@@ -300,6 +372,20 @@
System.out.println("% Total Top SVT Hits/Event: " + totalTopHitCount / eventCount);
System.out.println("% Total Bottom SVT Hits/Event: " + totalBotHitCount / eventCount);
System.out.println("\n%================================================%");
- }
+
+ if(saveRootFile) {
+ String rootFileName = outputRootFilename.isEmpty() ? "svthitplots.root" : outputRootFilename + "_svthitplots.root";
+ RootFileStore rootFileStore = new RootFileStore(rootFileName);
+ try {
+ rootFileStore.open();
+ rootFileStore.add(tree);
+ rootFileStore.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ }
+
}
Modified: java/branches/nathan-dev/parent/pom.xml
=============================================================================
--- java/branches/nathan-dev/parent/pom.xml (original)
+++ java/branches/nathan-dev/parent/pom.xml Wed Dec 9 17:34:41 2015
@@ -290,6 +290,11 @@
</exclusion>
</exclusions>
</dependency>
+ <dependency>
+ <groupId>org.lcsim</groupId>
+ <artifactId>lcsim-detector-framework</artifactId>
+ <version>3.1.6-SNAPSHOT</version>
+ </dependency>
</dependencies>
</dependencyManagement>
<reporting>
Modified: java/branches/nathan-dev/steering-files/src/main/resources/org/hps/steering/monitoring/SvtOnlineMonitoring.lcsim
=============================================================================
--- java/branches/nathan-dev/steering-files/src/main/resources/org/hps/steering/monitoring/SvtOnlineMonitoring.lcsim (original)
+++ java/branches/nathan-dev/steering-files/src/main/resources/org/hps/steering/monitoring/SvtOnlineMonitoring.lcsim Wed Dec 9 17:34:41 2015
@@ -23,7 +23,10 @@
<timeWindowWeight>3</timeWindowWeight>
<resetPeriod>50000</resetPeriod>
</driver>
- <driver name="SvtHitPlots" type="org.hps.monitoring.drivers.svt.SvtHitPlots" />
+ <driver name="SvtHitPlots" type="org.hps.monitoring.drivers.svt.SvtHitPlots">
+ <doPerChannelsSampleplots>true</doPerChannelsSampleplots>
+ <saveRootFile>true</saveRootFile>
+ </driver>
<driver name="SamplesPlots" type="org.hps.monitoring.drivers.svt.SamplesPlots" />
<driver name="PedestalPlots" type="org.hps.monitoring.drivers.svt.PedestalPlots" />
<driver name="RawTrackerHitFitterDriver" type="org.hps.recon.tracking.RawTrackerHitFitterDriver">
Modified: java/branches/nathan-dev/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim
=============================================================================
--- java/branches/nathan-dev/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim (original)
+++ java/branches/nathan-dev/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim Wed Dec 9 17:34:41 2015
@@ -51,7 +51,6 @@
ReconstructedParticle types are properly set.
-->
<driver name="MergeTrackCollections"/>
- <driver name="GBLOutputDriver" />
<driver name="GBLRefitterDriver" />
<driver name="TrackDataDriver" />
<driver name="ReconParticleDriver" />
@@ -134,8 +133,7 @@
<ecalClusterCollectionName>EcalClustersCorr</ecalClusterCollectionName>
<trackCollectionNames>MatchedTracks GBLTracks</trackCollectionNames>
</driver>
- <driver name="GBLOutputDriver" type="org.hps.recon.tracking.gbl.GBLOutputDriver"/>
- <driver name="GBLRefitterDriver" type="org.hps.recon.tracking.gbl.HpsGblRefitter"/>
+ <driver name="GBLRefitterDriver" type="org.hps.recon.tracking.gbl.GBLRefitterDriver"/>
<driver name="LCIOWriter" type="org.lcsim.util.loop.LCIODriver">
<outputFilePath>${outputFile}.slcio</outputFilePath>
</driver>
Modified: java/branches/nathan-dev/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC.lcsim
=============================================================================
--- java/branches/nathan-dev/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC.lcsim (original)
+++ java/branches/nathan-dev/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC.lcsim Wed Dec 9 17:34:41 2015
@@ -53,7 +53,6 @@
ReconstructedParticle types are properly set.
-->
<driver name="MergeTrackCollections"/>
- <driver name="GBLOutputDriver" />
<driver name="GBLRefitterDriver" />
<driver name="TrackDataDriver" />
<driver name="ReconParticleDriver" />
@@ -119,8 +118,7 @@
<rmsTimeCut>8.0</rmsTimeCut>
</driver>
<driver name="MergeTrackCollections" type="org.hps.recon.tracking.MergeTrackCollections" />
- <driver name="GBLOutputDriver" type="org.hps.recon.tracking.gbl.GBLOutputDriver"/>
- <driver name="GBLRefitterDriver" type="org.hps.recon.tracking.gbl.HpsGblRefitter"/>
+ <driver name="GBLRefitterDriver" type="org.hps.recon.tracking.gbl.GBLRefitterDriver"/>
<driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
<ecalCollectionName>EcalCalHits</ecalCollectionName>
<fixShapeParameter>true</fixShapeParameter>
Modified: java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/HelicalTrackHitDriver.java
=============================================================================
--- java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/HelicalTrackHitDriver.java (original)
+++ java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/HelicalTrackHitDriver.java Wed Dec 9 17:34:41 2015
@@ -64,8 +64,8 @@
private final List<String> _colnames = new ArrayList<String>();
private boolean _doTransformToTracking = true;
private boolean _saveAxialHits = false;
- private String _axialname = "AxialTrackHits";
- private String _axialmcrelname = "AxialTrackHitsMCRelations";
+ private final String _axialname = "AxialTrackHits";
+ private final String _axialmcrelname = "AxialTrackHitsMCRelations";
private boolean rejectGhostHits = false;
public enum LayerGeometryType {
@@ -143,7 +143,7 @@
public void setEpsStereo(double eps) {
this._crosser.setEpsStereoAngle(eps);
}
-
+
/**
*
* @param trans
@@ -199,8 +199,9 @@
// Create an LCRelation from a HelicalTrackHit to an MC particle used to
// create it
List<LCRelation> mcrelations = new ArrayList<LCRelation>();
- RelationalTable hittomc = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
+ RelationalTable hittomc = null;
if (event.hasCollection(LCRelation.class, "SVTTrueHitRelations")) {
+ hittomc = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
List<LCRelation> trueHitRelations = event.get(LCRelation.class, "SVTTrueHitRelations");
for (LCRelation relation : trueHitRelations) {
if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
@@ -241,9 +242,11 @@
// Create a HelicalTrackStrip for this hit
HelicalTrackStrip strip = makeDigiStrip(h);
- for (RawTrackerHit rth : h.getRawHits()) {
- for (Object simHit : hittomc.allFrom(rth)) {
- strip.addMCParticle(((SimTrackerHit) simHit).getMCParticle());
+ if (hittomc != null) {
+ for (RawTrackerHit rth : h.getRawHits()) {
+ for (Object simHit : hittomc.allFrom(rth)) {
+ strip.addMCParticle(((SimTrackerHit) simHit).getMCParticle());
+ }
}
}
@@ -259,10 +262,12 @@
if (((HpsSiSensor) h.getSensor()).isAxial()) {
HelicalTrack2DHit haxial = makeDigiAxialHit(h);
axialhits.add(haxial);
- List<RawTrackerHit> rl = haxial.getRawHits();
- for (RawTrackerHit rth : rl) {
- for (Object simHit : hittomc.allFrom(rth)) {
- haxial.addMCParticle(((SimTrackerHit) simHit).getMCParticle());
+ if (hittomc != null) {
+ List<RawTrackerHit> rl = haxial.getRawHits();
+ for (RawTrackerHit rth : rl) {
+ for (Object simHit : hittomc.allFrom(rth)) {
+ haxial.addMCParticle(((SimTrackerHit) simHit).getMCParticle());
+ }
}
}
axialmcrelations.add(new MyLCRelation(haxial, haxial.getMCParticles()));
@@ -456,14 +461,18 @@
helhits.addAll(stereoCrosses);
event.put(_outname, helhits, HelicalTrackHit.class, 0);
event.put(_hitrelname, hitrelations, LCRelation.class, 0);
- event.put(_mcrelname, mcrelations, LCRelation.class, 0);
+ if (hittomc != null) {
+ event.put(_mcrelname, mcrelations, LCRelation.class, 0);
+ }
if (_saveAxialHits) {
event.put(_axialname, axialhits, HelicalTrackHit.class, 0);
- event.put(_axialmcrelname, axialmcrelations, LCRelation.class, 0);
- System.out.println(this.getClass().getSimpleName() + " : number of " + _axialmcrelname + " found = " + axialmcrelations.size());
+ if (hittomc != null) {
+ event.put(_axialmcrelname, axialmcrelations, LCRelation.class, 0);
+ System.out.println(this.getClass().getSimpleName() + " : number of " + _axialmcrelname + " found = " + axialmcrelations.size());
+ }
}
if (_doTransformToTracking) {
- addRotatedHitsToEvent(event, stereoCrosses);
+ addRotatedHitsToEvent(event, stereoCrosses, hittomc != null);
if (_saveAxialHits) {
addRotated2DHitsToEvent(event, axialhits);
}
@@ -595,7 +604,7 @@
return strip;
}
- private void addRotatedHitsToEvent(EventHeader event, List<HelicalTrackCross> stereohits) {
+ private void addRotatedHitsToEvent(EventHeader event, List<HelicalTrackCross> stereohits, boolean isMC) {
List<HelicalTrackHit> rotatedhits = new ArrayList<HelicalTrackHit>();
List<LCRelation> hthrelations = new ArrayList<LCRelation>();
@@ -634,10 +643,10 @@
strip1.add(rotatedstriphits.get(0));
strip2.add(rotatedstriphits.get(1));
List<HelicalTrackCross> newhits = _crosser.MakeHits(strip1, strip2);
- if(newhits.size()!=1) {
+ if (newhits.size() != 1) {
throw new RuntimeException("no rotated cross was created!?");
}
- HelicalTrackCross newhit = newhits.get(0);
+ HelicalTrackCross newhit = newhits.get(0);
//HelicalTrackCross newhit = new HelicalTrackCross(rotatedstriphits.get(0), rotatedstriphits.get(1));
for (MCParticle mcp : cross.getMCParticles()) {
newhit.addMCParticle(mcp);
@@ -651,7 +660,9 @@
event.put("Rotated" + _outname, rotatedhits, HelicalTrackHit.class, 0);
event.put("Rotated" + _hitrelname, hthrelations, LCRelation.class, 0);
- event.put("Rotated" + _mcrelname, mcrelations, LCRelation.class, 0);
+ if (isMC) {
+ event.put("Rotated" + _mcrelname, mcrelations, LCRelation.class, 0);
+ }
}
/*
Modified: java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java
=============================================================================
--- java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java (original)
+++ java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java Wed Dec 9 17:34:41 2015
@@ -16,7 +16,6 @@
import org.lcsim.event.TrackState;
import org.lcsim.event.TrackerHit;
import org.lcsim.event.base.BaseLCRelation;
-import org.lcsim.event.base.BaseRelationalTable;
import org.lcsim.fit.helicaltrack.HelicalTrackCross;
import org.lcsim.fit.helicaltrack.HelicalTrackHit;
import org.lcsim.fit.helicaltrack.HelicalTrackStrip;
@@ -34,7 +33,7 @@
public final class TrackDataDriver extends Driver {
/** logger **/
- private static Logger LOGGER = Logger.getLogger(TrackDataDriver.class.getPackage().getName());
+ private static final Logger LOGGER = Logger.getLogger(TrackDataDriver.class.getPackage().getName());
/** The B field map */
@@ -107,6 +106,7 @@
*
* @param detector LCSim {@link Detector} geometry
*/
+ @Override
protected void detectorChanged(Detector detector) {
// Get the field map from the detector object
@@ -121,6 +121,7 @@
*
* @param event : LCSim event
*/
+ @Override
protected void process(EventHeader event) {
// Check if the event contains a collection of the type Track. If it
@@ -135,15 +136,11 @@
// Get the collection of LCRelations relating RotatedHelicalTrackHits to
// HelicalTrackHits
- List<LCRelation> rotatedHthToHthRelations = event.get(LCRelation.class, ROTATED_HTH_REL_COL_NAME);
- BaseRelationalTable hthToRotatedHth = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_ONE,
- RelationalTable.Weighting.UNWEIGHTED);
- hthToRotatedHth.addRelations(rotatedHthToHthRelations);
RelationalTable hitToStrips = TrackUtils.getHitToStripsTable(event);
RelationalTable hitToRotated = TrackUtils.getHitToRotatedTable(event);
- List<HelicalTrackHit> rotatedHths = event.get(HelicalTrackHit.class, ROTATED_HTH_COL_NAME);
+// List<HelicalTrackHit> rotatedHths = event.get(HelicalTrackHit.class, ROTATED_HTH_COL_NAME);
// Create a container that will be used to store all TrackData objects.
List<TrackData> trackDataCollection = new ArrayList<TrackData>();
@@ -159,21 +156,21 @@
// residuals
List<LCRelation> trackToTrackResidualsRelations = new ArrayList<LCRelation>();
- double xResidual = 0;
- double yResidual = 0;
-
- float totalT0 = 0;
- float totalHits = 0;
- float trackTime = 0;
+ double xResidual;
+ double yResidual;
+
+ float totalT0;
+ float totalHits;
+ float trackTime;
int trackerVolume = -1;
- boolean isFirstHit = true;
-
- HpsSiSensor sensor = null;
- Hep3Vector stereoHitPosition = null;
- Hep3Vector trackPosition = null;
- HelicalTrackHit helicalTrackHit = null;
+ boolean isFirstHit;
+
+ HpsSiSensor sensor;
+ Hep3Vector stereoHitPosition;
+ Hep3Vector trackPosition;
+ HelicalTrackHit helicalTrackHit;
List<Double> t0Residuals = new ArrayList<Double>();
List<Double> trackResidualsX = new ArrayList<Double>();
@@ -198,7 +195,10 @@
stereoLayers.clear();
isFirstHit = true;
- //
+// TrackState trackStateForResiduals = TrackUtils.getTrackStateAtLocation(track, TrackState.AtLastHit);
+// if (trackStateForResiduals == null ) trackStateForResiduals= TrackUtils.getTrackStateAtLocation(track, TrackState.AtIP);
+ TrackState trackStateForResiduals = TrackUtils.getTrackStateAtLocation(track, TrackState.AtIP);
+
// Change the position of a HelicalTrackHit to be the corrected
// one.
// FIXME: Now that multiple track collections are being used,
@@ -216,7 +216,7 @@
// Extrapolate the track to the stereo hit position and
// calculate track residuals
stereoHitPosition = ((HelicalTrackHit) rotatedStereoHit).getCorrectedPosition();
- trackPosition = TrackUtils.extrapolateTrack(track, stereoHitPosition.x());
+ trackPosition = TrackUtils.extrapolateTrack(trackStateForResiduals, stereoHitPosition.x());
xResidual = trackPosition.x() - stereoHitPosition.y();
yResidual = trackPosition.y() - stereoHitPosition.z();
trackResidualsX.add(xResidual);
@@ -230,7 +230,7 @@
// Get the HelicalTrackHit corresponding to the
// RotatedHelicalTrackHit associated with a track
- helicalTrackHit = (HelicalTrackHit) hthToRotatedHth.from(rotatedStereoHit);
+ helicalTrackHit = (HelicalTrackHit) hitToRotated.from(rotatedStereoHit);
((HelicalTrackHit) rotatedStereoHit).setPosition(stereoHitPosition.v());
stereoHitPosition = CoordinateTransformations.transformVectorToDetector(stereoHitPosition);
helicalTrackHit.setPosition(stereoHitPosition.v());
@@ -261,18 +261,7 @@
// Extrapolate the track to the face of the Ecal and get the TrackState
if( TrackType.isGBL(track.getType())) {
- TrackState stateLast = null;
- TrackState stateIP = null;
- for(int ist= 0; ist < track.getTrackStates().size(); ist++) {
- if( track.getTrackStates().get(ist).getLocation() == TrackState.AtLastHit )
- stateLast = track.getTrackStates().get(ist);
- if( track.getTrackStates().get(ist).getLocation() == TrackState.AtIP )
- stateIP = track.getTrackStates().get(ist);
- }
- if( stateLast == null)
- throw new RuntimeException("last hit track state for GBL track was not found");
-// TrackState stateEcal = TrackUtils.extrapolateTrackUsingFieldMap(stateLast, extStartPos, ecalPosition, stepSize, bFieldMap);
-// track.getTrackStates().add(stateEcal);
+ TrackState stateIP = TrackUtils.getTrackStateAtLocation(track, TrackState.AtIP);
if( stateIP == null)
throw new RuntimeException("IP track state for GBL track was not found");
TrackState stateEcalIP = TrackUtils.extrapolateTrackUsingFieldMap(stateIP, extStartPos, ecalPosition, stepSize, bFieldMap);
@@ -317,7 +306,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/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java
=============================================================================
--- java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java (original)
+++ java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java Wed Dec 9 17:34:41 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) {
@@ -1289,15 +1306,25 @@
return new Line(r0, phi, lambda);
}
- public static TrackState getTrackStateAtECal(Track trk) {
+ /**
+ * Port of Track.getTrackState(int location) from the C++ LCIO API.
+ * @param trk A track.
+ * @param location A TrackState location constant
+ * @return The first matching TrackState; null if none is found.
+ */
+ public static TrackState getTrackStateAtLocation(Track trk, int location) {
for (TrackState state : trk.getTrackStates()) {
- if (state.getLocation() == TrackState.AtCalorimeter) {
+ if (state.getLocation() == location) {
return state;
}
}
return null;
}
+ public static TrackState getTrackStateAtECal(Track trk) {
+ return getTrackStateAtLocation(trk, TrackState.AtCalorimeter);
+ }
+
public static Hep3Vector getBField(Detector detector) {
return detector.getFieldMap().getField(new BasicHep3Vector(0., 0., 500.0));
}
Modified: java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java
=============================================================================
--- java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java (original)
+++ java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java Wed Dec 9 17:34:41 2015
@@ -13,11 +13,9 @@
import java.util.logging.Logger;
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.BaseRelationalTable;
import org.lcsim.event.base.BaseTrack;
import org.lcsim.fit.helicaltrack.HelicalTrackHit;
import org.lcsim.geometry.Detector;
@@ -65,7 +63,7 @@
private double rmsTimeCut = -1;
private boolean rejectUncorrectedHits = true;
private boolean rejectSharedHits = false;
-
+
public TrackerReconDriver() {
}
@@ -165,8 +163,9 @@
//
// 1) Driver to run Seed Tracker.
//
- if (!strategyResource.startsWith("/"))
+ if (!strategyResource.startsWith("/")) {
strategyResource = "/org/hps/recon/tracking/strategies/" + strategyResource;
+ }
List<SeedStrategy> sFinallist = StrategyXMLUtils.getStrategyListFromInputStream(this.getClass().getResourceAsStream(strategyResource));
SeedTracker stFinal = new SeedTracker(sFinallist, this._useHPSMaterialManager, this.includeMS);
stFinal.setApplySectorBinning(_applySectorBinning);
@@ -177,14 +176,16 @@
stFinal.setInputCollectionName(stInputCollectionName);
stFinal.setTrkCollectionName(trackCollectionName);
stFinal.setBField(bfield);
- if (debug)
+ if (debug) {
stFinal.setDiagnostics(new SeedTrackerDiagnostics());
+ }
// stFinal.setSectorParams(false); //this doesn't actually seem to do anything
stFinal.setSectorParams(1, 10000);
add(stFinal);
- if (rmsTimeCut > 0)
+ if (rmsTimeCut > 0) {
stFinal.setTrackCheck(new HitTimeTrackCheck(rmsTimeCut));
+ }
}
/**
@@ -198,10 +199,11 @@
// Debug printouts.
if (debug) {
- if (event.hasCollection(HelicalTrackHit.class, stInputCollectionName))
+ if (event.hasCollection(HelicalTrackHit.class, stInputCollectionName)) {
System.out.println(this.getClass().getSimpleName() + ": The HelicalTrackHit collection " + stInputCollectionName + " has " + event.get(HelicalTrackHit.class, stInputCollectionName).size() + " hits.");
- else
+ } else {
System.out.println(this.getClass().getSimpleName() + ": No HelicalTrackHit collection for this event");
+ }
// Check for Tracks.
List<Track> tracks = event.get(Track.class, trackCollectionName);
System.out.println(this.getClass().getSimpleName() + ": The Track collection " + trackCollectionName + " has " + tracks.size() + " tracks.");
@@ -236,27 +238,13 @@
}
if (rejectSharedHits) {
-
- RelationalTable hittostrip = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
- List<LCRelation> hitrelations = event.get(LCRelation.class, "HelicalTrackHitRelations");
- 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, "RotatedHelicalTrackHitRelations");
- for (LCRelation relation : rotaterelations) {
- if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
- hittorotated.add(relation.getFrom(), relation.getTo());
- }
- }
+ RelationalTable hitToStrips = TrackUtils.getHitToStripsTable(event);
+ RelationalTable hitToRotated = TrackUtils.getHitToRotatedTable(event);
Map<TrackerHit, List<Track>> stripsToTracks = new HashMap<TrackerHit, List<Track>>();
for (Track track : tracks) {
for (TrackerHit hit : track.getTrackerHits()) {
- Collection<TrackerHit> htsList = hittostrip.allFrom(hittorotated.from(hit));
+ Collection<TrackerHit> htsList = hitToStrips.allFrom(hitToRotated.from(hit));
for (TrackerHit strip : htsList) {
List<Track> sharedTracks = stripsToTracks.get(strip);
if (sharedTracks == null) {
@@ -272,7 +260,7 @@
while (iter.hasNext()) {
Track track = iter.next();
for (TrackerHit hit : track.getTrackerHits()) {
- Collection<TrackerHit> htsList = hittostrip.allFrom(hittorotated.from(hit));
+ Collection<TrackerHit> htsList = hitToStrips.allFrom(hitToRotated.from(hit));
for (TrackerHit strip : htsList) {
List<Track> sharedTracks = stripsToTracks.get(strip);
if (sharedTracks.size() > 1) {
@@ -304,8 +292,9 @@
* @param tracks The list of <code>Track</code> objects.
*/
private void setTrackType(List<Track> tracks) {
- for (Track track : tracks)
+ for (Track track : tracks) {
((BaseTrack) track).setTrackType(BaseTrack.TrackType.Y_FIELD.ordinal());
+ }
}
@Override
Modified: java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLKinkData.java
=============================================================================
--- java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLKinkData.java (original)
+++ java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLKinkData.java Wed Dec 9 17:34:41 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/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutput.java
=============================================================================
--- java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutput.java (original)
+++ java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutput.java Wed Dec 9 17:34:41 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/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutputDriver.java
=============================================================================
--- java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutputDriver.java (original)
+++ java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutputDriver.java Wed Dec 9 17:34:41 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/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLRefitterDriver.java
=============================================================================
--- java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLRefitterDriver.java (original)
+++ java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLRefitterDriver.java Wed Dec 9 17:34:41 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;
@@ -26,6 +28,7 @@
private String inputCollectionName = "MatchedTracks";
private String outputCollectionName = "GBLTracks";
+ private String trackRelationCollectionName = "MatchedToGBLTrackRelations";
private double bfield;
private final MultipleScattering _scattering = new MultipleScattering(new MaterialSupervisor());
@@ -66,12 +69,21 @@
RelationalTable hitToRotated = TrackUtils.getHitToRotatedTable(event);
List<Track> refittedTracks = new ArrayList<Track>();
+ List<LCRelation> trackRelations = new ArrayList<LCRelation>();
+
+ 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());
+ trackRelations.add(new BaseLCRelation(track, newTrack.getFirst()));
inputToRefitted.put(track, newTrack.getFirst());
+
+ kinkDataCollection.add(newTrack.getSecond());
+ kinkDataRelations.add(new BaseLCRelation(newTrack.getSecond(), newTrack.getFirst()));
}
if (mergeTracks) {
@@ -106,7 +118,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 +143,8 @@
// Put the tracks back into the event and exit
int flag = 1 << LCIOConstants.TRBIT_HITS;
event.put(outputCollectionName, refittedTracks, Track.class, flag);
+ event.put(trackRelationCollectionName, trackRelations, LCRelation.class, 0);
+ event.put(GBLKinkData.DATA_COLLECTION, kinkDataCollection, GBLKinkData.class, 0);
+ event.put(GBLKinkData.DATA_RELATION_COLLECTION, kinkDataRelations, LCRelation.class, 0);
}
}
Modified: java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/MakeGblTracks.java
=============================================================================
--- java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/MakeGblTracks.java (original)
+++ java/branches/nathan-dev/tracking/src/main/java/org/hps/recon/tracking/gbl/MakeGblTracks.java Wed Dec 9 17:34:41 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));
- }
- }
}
Modified: java/branches/nathan-dev/users/src/main/java/org/hps/users/meeg/TridentMCFilter.java
=============================================================================
--- java/branches/nathan-dev/users/src/main/java/org/hps/users/meeg/TridentMCFilter.java (original)
+++ java/branches/nathan-dev/users/src/main/java/org/hps/users/meeg/TridentMCFilter.java Wed Dec 9 17:34:41 2015
@@ -16,8 +16,45 @@
*/
public class TridentMCFilter extends EventReconFilter {
+ private boolean requireFrontHits = false;
+ private double minL12Kink = -1;
+ private double maxL12Kink = -1;
+ private double minL1Kink = -1;
+ private double maxL1Kink = -1;
+ private double minL2Kink = -1;
+ private double maxL2Kink = -1;
+
+ public void setMinL12Kink(double minL12Kink) {
+ this.minL12Kink = minL12Kink;
+ }
+
+ public void setMaxL12Kink(double maxL12Kink) {
+ this.maxL12Kink = maxL12Kink;
+ }
+
+ public void setMinL1Kink(double minL1Kink) {
+ this.minL1Kink = minL1Kink;
+ }
+
+ public void setMaxL1Kink(double maxL1Kink) {
+ this.maxL1Kink = maxL1Kink;
+ }
+
+ public void setMinL2Kink(double minL2Kink) {
+ this.minL2Kink = minL2Kink;
+ }
+
+ public void setMaxL2Kink(double maxL2Kink) {
+ this.maxL2Kink = maxL2Kink;
+ }
+
+ public void setRequireFrontHits(boolean requireFrontHits) {
+ this.requireFrontHits = requireFrontHits;
+ }
+
@Override
public void process(EventHeader event) {
+ incrementEventProcessed();
List<MCParticle> MCParticles = event.getMCParticles();
List<MCParticle> tridentParticles = null;
@@ -39,7 +76,11 @@
int nElectronsWithTracks = 0, nPositronsWithTracks = 0;
MCParticle electron = null, positron = null;
+ particleLoop:
for (MCParticle particle : tridentParticles) {
+ if (!trackHitMap.containsKey(particle)) {
+ continue;
+ }
Set<Integer> layers = trackHitMap.get(particle).keySet();
int pairCount = 0;
for (Integer layer : layers) {
@@ -47,31 +88,74 @@
pairCount++;
}
}
- boolean hasTrack = (pairCount >= 5);
+ if (pairCount < 5) {
+ continue;
+ }
+ if (requireFrontHits) {
+ for (int i = 1; i < 5; i++) {
+ if (!layers.contains(i)) {
+ continue particleLoop;
+ }
+ }
+ }
- if (hasTrack && particle.getCharge() < 0) {
+ if (particle.getCharge() < 0) {
nElectronsWithTracks++;
electron = particle;
}
- if (hasTrack && particle.getCharge() > 0) {
+ if (particle.getCharge() > 0) {
nPositronsWithTracks++;
positron = particle;
}
}
if (electron == null || positron == null) {
- System.out.println("not enough trident daughters with tracks");
+// System.out.println("not enough trident daughters with tracks");
skipEvent();
}
if (nElectronsWithTracks > 1 || nPositronsWithTracks > 1) {
- System.out.println("too many trident daughters with tracks");
+// System.out.println("too many trident daughters with tracks");
skipEvent();
}
-// double deflection12_ele = KinkAnalysisDriver.deflection(trackHitMap.get(electron), 0, 4);
-// double deflection12_pos = KinkAnalysisDriver.deflection(trackHitMap.get(positron), 0, 4);
+ double deflection12_ele = KinkAnalysisDriver.deflection(trackHitMap.get(electron), 0, 4);
+ double deflection12_pos = KinkAnalysisDriver.deflection(trackHitMap.get(positron), 0, 4);
+ double deflection1_ele = KinkAnalysisDriver.deflection(trackHitMap.get(electron), 0, 2);
+ double deflection1_pos = KinkAnalysisDriver.deflection(trackHitMap.get(positron), 0, 2);
+ double deflection2_ele = KinkAnalysisDriver.deflection(trackHitMap.get(electron), 2, 4);
+ double deflection2_pos = KinkAnalysisDriver.deflection(trackHitMap.get(positron), 2, 4);
+ if (minL12Kink > 0) {
+ if (Math.abs(deflection12_ele) < minL12Kink && Math.abs(deflection12_pos) < minL12Kink) {
+ skipEvent();
+ }
+ }
+ if (maxL12Kink > 0) {
+ if (Math.abs(deflection12_ele) > maxL12Kink || Math.abs(deflection12_pos) > maxL12Kink) {
+ skipEvent();
+ }
+ }
+ if (minL1Kink > 0) {
+ if (Math.abs(deflection1_ele) < minL1Kink && Math.abs(deflection1_pos) < minL1Kink) {
+ skipEvent();
+ }
+ }
+ if (maxL1Kink > 0) {
+ if (Math.abs(deflection1_ele) > maxL1Kink || Math.abs(deflection1_pos) > maxL1Kink) {
+ skipEvent();
+ }
+ }
+ if (minL2Kink > 0) {
+ if (Math.abs(deflection2_ele) < minL2Kink && Math.abs(deflection2_pos) < minL2Kink) {
+ skipEvent();
+ }
+ }
+ if (maxL2Kink > 0) {
+ if (Math.abs(deflection2_ele) > maxL2Kink || Math.abs(deflection2_pos) > maxL2Kink) {
+ skipEvent();
+ }
+ }
+
incrementEventPassed();
-
}
}
|