Author: [log in to unmask]
Date: Tue May 26 16:56:03 2015
New Revision: 3030
Log:
Add even more plots.
Modified:
java/trunk/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java
Modified: java/trunk/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java Tue May 26 16:56:03 2015
@@ -7,9 +7,11 @@
import hep.aida.IPlotterStyle;
import hep.aida.IProfile;
import hep.physics.matrix.SymmetricMatrix;
+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.List;
import java.util.Map;
@@ -26,6 +28,11 @@
import org.hps.recon.tracking.ShaperFitAlgorithm;
import org.hps.recon.tracking.StraightLineTrack;
import org.hps.recon.tracking.TrackUtils;
+import org.hps.recon.tracking.gbl.HelicalTrackStripGbl;
+import org.hps.recon.tracking.gbl.HpsGblRefitter;
+import org.hps.util.BasicLogFormatter;
+import org.lcsim.constants.Constants;
+import org.lcsim.detector.IDetectorElement;
import org.lcsim.detector.tracker.silicon.HpsSiSensor;
import org.lcsim.detector.tracker.silicon.SiSensor;
import org.lcsim.event.Cluster;
@@ -48,6 +55,7 @@
import org.lcsim.recon.tracking.seedtracker.SeedTrack;
import org.lcsim.util.Driver;
import org.lcsim.util.aida.AIDA;
+import org.lcsim.util.log.LogUtil;
/**
*
@@ -55,6 +63,11 @@
*/
public class TrackingReconstructionPlots extends Driver {
+ static {
+ hep.aida.jfree.AnalysisFactory.register();
+ }
+
+
private AIDA aida = AIDA.defaultInstance();
private String rawTrackerHitCollectionName = "SVTRawTrackerHits";
private String fittedTrackerHitCollectionName = "SVTFittedRawTrackerHits";
@@ -74,10 +87,13 @@
IPlotter plotter2221;
IPlotter plotter2222;
IPlotter plotter222;
+ IPlotter plotter22299;
+ IPlotter plotter22298;
IPlotter plotter2224;
IPlotter plotter2223;
IPlotter plotter3;
IPlotter plotter3_1;
+ IPlotter plotter3_11;
IPlotter plotter3_2;
IPlotter plotter4;
IPlotter plotter5;
@@ -86,6 +102,8 @@
IPlotter plotter6;
IPlotter plotter66;
IPlotter plotter7;
+ IPlotter plotter8;
+ IPlotter plotter9;
IPlotter top1;
IPlotter top2;
IPlotter top3;
@@ -98,13 +116,27 @@
double zAtColl = -1500;
IHistogram1D trkPx;
IHistogram1D nTracks;
+ IHistogram1D nTracksTop;
+ IHistogram1D nTracksBot;
ShaperFitAlgorithm _shaper = new DumbShaperFit();
+ HelixConverter converter = new HelixConverter(0);
private boolean showPlots = true;
+ private double _bfield;
+ private static Logger logger = LogUtil.create(TrackingReconstructionPlots.class, new BasicLogFormatter());
@Override
protected void detectorChanged(Detector detector) {
aida.tree().cd("/");
- //sensors = detector.getSubdetector(trackerName).getDetectorElement().findDescendants(SiSensor.class);
+ List<HpsSiSensor> sensors = new ArrayList<HpsSiSensor>();
+ for(HpsSiSensor s : detector.getDetectorElement().findDescendants(HpsSiSensor.class)) {
+ if(s.getName().startsWith("module_") && s.getName().endsWith("sensor0")) {
+ sensors.add(s);
+ }
+ }
+ logger.info("Found " + sensors.size() + " SiSensors.");
+
+ Hep3Vector bfieldvec = detector.getFieldMap().getField(new BasicHep3Vector(0., 0., 1.));
+ _bfield = bfieldvec.y();
IAnalysisFactory fac = aida.analysisFactory();
plotter = fac.createPlotterFactory().create("HPS Tracking Plots");
@@ -274,7 +306,7 @@
// ******************************************************************
plotter222 = fac.createPlotterFactory().create("HPS Tracking Plots");
- plotter222.setTitle("Other");
+ plotter222.setTitle("HPS Tracking Plots");
//plotterFrame.addPlotter(plotter222);
IPlotterStyle style222 = plotter222.style();
style222.dataStyle().fillStyle().setColor("yellow");
@@ -288,9 +320,53 @@
plotter222.region(0).plot(nHits);
plotter222.region(1).plot(nTracks);
- plotter222.region(1).plot(nHitsCluster);
+ plotter222.region(2).plot(nHitsCluster);
if(showPlots) plotter222.show();
+
+
+ // ******************************************************************
+
+ plotter22299 = fac.createPlotterFactory().create("HPS Tracking Plots Top");
+ plotter22299.setTitle("HPS Tracking Plots Top");
+ //plotterFrame.addPlotter(plotter22299);
+ IPlotterStyle style22299 = plotter22299.style();
+ style22299.dataStyle().fillStyle().setColor("yellow");
+ style22299.dataStyle().errorBarStyle().setVisible(false);
+ plotter22299.createRegions(2, 2);
+
+ IHistogram1D nHitsTop = aida.histogram1D("Hits per Track Top", 4, 3, 7);
+ nTracksTop = aida.histogram1D("Tracks per Event Top", 3, 0, 3);
+ IHistogram1D nHitsClusterTop = aida.histogram1D("Hits in Cluster (HitOnTrack) Top", 4, 0, 4);
+
+
+ plotter22299.region(0).plot(nHitsTop);
+ plotter22299.region(1).plot(nTracksTop);
+ plotter22299.region(2).plot(nHitsClusterTop);
+
+ if(showPlots) plotter22299.show();
+
+// ******************************************************************
+
+ plotter22298 = fac.createPlotterFactory().create("HPS Tracking Plots Bottom");
+ plotter22298.setTitle("HPS Tracking Plots Bottom");
+ //plotterFrame.addPlotter(plotter22298);
+ IPlotterStyle style22298 = plotter22298.style();
+ style22298.dataStyle().fillStyle().setColor("yellow");
+ style22298.dataStyle().errorBarStyle().setVisible(false);
+ plotter22298.createRegions(2, 2);
+
+ IHistogram1D nHitsBot = aida.histogram1D("Hits per Track Bot", 4, 3, 7);
+ nTracksBot = aida.histogram1D("Tracks per Event Bot", 3, 0, 3);
+ IHistogram1D nHitsClusterBot = aida.histogram1D("Hits in Cluster (HitOnTrack) Bot", 4, 0, 4);
+
+
+ plotter22298.region(0).plot(nHitsBot);
+ plotter22298.region(1).plot(nTracksBot);
+ plotter22298.region(2).plot(nHitsClusterBot);
+
+ if(showPlots) plotter22298.show();
+
// ******************************************************************
@@ -388,6 +464,42 @@
plotter3.region(9).plot(mod5ResY);
if(showPlots) plotter3.show();
+
+
+
+ plotter3_11 = fac.createPlotterFactory().create("HPS Strip Residual Plots");
+ plotter3_11.setTitle("Strip Residuals (Top)");
+ //plotterFrame.addPlotter(plotter3_11);
+ IPlotterStyle style3_11 = plotter3_11.style();
+ style3_11.dataStyle().fillStyle().setColor("yellow");
+ style3_11.dataStyle().errorBarStyle().setVisible(false);
+ plotter3_11.createRegions(6, 6);
+ int i=0;
+ for(HpsSiSensor sensor : sensors) {
+ double min = 0.0;
+ double max = 0.0;
+ if(sensor.getName().contains("L1")) {
+ min=-0.04; max=0.04;
+ } else if(sensor.getName().contains("L2")) {
+ min=-1; max=1;
+ } else if(sensor.getName().contains("L3")) {
+ min=-1.5; max=1.5;
+ } else if(sensor.getName().contains("L4")) {
+ min=-3; max=3;
+ } else if(sensor.getName().contains("L5")) {
+ min=-4; max=4;
+ } else if(sensor.getName().contains("L6")) {
+ min=-5; max=5;
+ } else {
+ throw new RuntimeException("Invalid sensor name: " + sensor.getName());
+ }
+ IHistogram1D resX = aida.histogram1D(sensor.getName() + " strip residual (mm)", 50, min, max);
+ plotter3_11.region(i).plot(resX);
+ i++;
+ }
+
+ if(showPlots) plotter3_11.show();
+
plotter3_1 = fac.createPlotterFactory().create("HPS Residual Plots (Single hit per layer)");
plotter3_1.setTitle("Residuals (Top)");
@@ -776,11 +888,45 @@
plotter7.region(0).plot(quadrants);
if(showPlots) plotter7.show();
+
+ plotter8 = fac.createPlotterFactory().create("HPS Strip Hit Multiplicity");
+ plotter8.setTitle("Strip Hit Multiplicity");
+ //plotterFrame.addPlotter(plotter8);
+ IPlotterStyle style8 = plotter8.style();
+ style8.dataStyle().fillStyle().setColor("yellow");
+ style8.dataStyle().errorBarStyle().setVisible(false);
+ plotter8.createRegions(6, 6);
+ i=0;
+ for(SiSensor sensor : sensors) {
+ IHistogram1D resX = aida.histogram1D(sensor.getName() + " strip hits", 10, 0, 10);
+ plotter8.region(i).plot(resX);
+ i++;
+ }
+
+ if(showPlots) plotter8.show();
+
+
+ plotter9 = fac.createPlotterFactory().create("HPS Strip Hit On Track Multiplicity");
+ plotter9.setTitle("Strip Hit Multiplicity");
+ //plotterFrame.addPlotter(plotter9);
+ IPlotterStyle style9 = plotter9.style();
+ style9.dataStyle().fillStyle().setColor("yellow");
+ style9.dataStyle().errorBarStyle().setVisible(false);
+ plotter9.createRegions(6, 6);
+ i=0;
+ for(SiSensor sensor : sensors) {
+ IHistogram1D resX = aida.histogram1D(sensor.getName() + " strip hits on track", 3, 0, 3);
+ plotter9.region(i).plot(resX);
+ i++;
+ }
+
+ if(showPlots) plotter9.show();
}
public TrackingReconstructionPlots() {
+ logger.setLevel(Level.WARNING);
}
public void setOutputPlots(String output) {
@@ -820,47 +966,31 @@
// System.out.println(helicalTrackHitCollectionName + " does not exist; skipping event");
return;
}
-
- List<HelicalTrackHit> rotList = event.get(HelicalTrackHit.class, rotatedTrackHitCollectionName);
- for (HelicalTrackHit hth : rotList) {
- HelicalTrackCross htc = (HelicalTrackCross) hth;
-// System.out.println("TrackingReconstructionPlots::original helical track position = "+hth.getPosition()[0]+","+hth.getPosition()[1]+","+hth.getPosition()[2]);
-// System.out.println("TrackingReconstructionPlots::corrected helical track position = "+htc.getCorrectedPosition().toString());
- }
List<HelicalTrackHit> hthList = event.get(HelicalTrackHit.class, helicalTrackHitCollectionName);
int[] layersTop = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int[] layersBot = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ Map<HpsSiSensor, Integer> stripHits = new HashMap<HpsSiSensor, Integer>();
for (HelicalTrackHit hth : hthList) {
HelicalTrackCross htc = (HelicalTrackCross) hth;
-// System.out.println("TrackingReconstructionPlots::original helical track position = "+hth.getPosition()[0]+","+hth.getPosition()[1]+","+hth.getPosition()[2]);
-// System.out.println("TrackingReconstructionPlots::corrected helical track position = "+htc.getCorrectedPosition().toString());
- //These Helical Track Hits are in the JLAB frame
-// htc.resetTrackDirection();
- double x = htc.getPosition()[0];
- double y = htc.getPosition()[1];
HpsSiSensor sensor = ((HpsSiSensor) ((RawTrackerHit) htc.getRawHits().get(0)).getDetectorElement());
+ for(HelicalTrackStrip strip : htc.getStrips()) {
+ HpsSiSensor stripsensor = (HpsSiSensor) ((RawTrackerHit)strip.rawhits().get(0)).getDetectorElement();
+ if(stripHits.containsKey(stripsensor)) {
+ stripHits.put(stripsensor, stripHits.get(stripsensor) + 1);
+ } else {
+ stripHits.put(stripsensor, 0);
+ }
+ }
if(sensor.isTopLayer()){
layersTop[htc.Layer() - 1]++;
- Hep3Vector sensorPos = ((SiSensor) ((RawTrackerHit) htc.getRawHits().get(0)).getDetectorElement()).getGeometry().getPosition();
- if (htc.Layer() == 1) {
-// System.out.println(sensorPos.toString());
-// System.out.println("Hit X = " + x + "; Hit Y = " + y);
-// aida.histogram2D("Layer 1 HTH Position: Top").fill(x - sensorPos.x(), y - sensorPos.y());
- }
-// if (htc.Layer() == 7)
-// aida.histogram2D("Layer 7 HTH Position: Top").fill(x - sensorPos.x(), y - sensorPos.y());
} else {
layersBot[htc.Layer() - 1]++;
- Hep3Vector sensorPos = ((SiSensor) ((RawTrackerHit) htc.getRawHits().get(0)).getDetectorElement()).getGeometry().getPosition();
- if (htc.Layer() == 1) {
-// System.out.println(sensorPos.toString());
-// System.out.println("Hit X = " + x + "; Hit Y = " + y);
-// aida.histogram2D("Layer 1 HTH Position: Bottom").fill(x - sensorPos.x(), y - sensorPos.y());
- }
-// if (htc.Layer() == 7)
-// aida.histogram2D("Layer 7 HTH Position: Bottom").fill(x - sensorPos.x(), y - sensorPos.y());
- }
- }
+ }
+ }
+ for(Map.Entry<HpsSiSensor,Integer> sensor : stripHits.entrySet()) {
+ aida.histogram1D(sensor.getKey().getName() + " strip hits").fill(sensor.getValue());
+ }
+
for (int i = 0; i < 12; i++) {
aida.profile1D("Number of Stereo Hits per layer in Top Half").fill(i + 1, layersTop[i]);
aida.profile1D("Number of Stereo Hits per layer in Bottom Half").fill(i + 1, layersBot[i]);
@@ -934,6 +1064,9 @@
Map<Track, Cluster> eCanditates = new HashMap<Track, Cluster>();
Map<Track, Cluster> pCanditates = new HashMap<Track, Cluster>();
+ int ntracksTop = 0;
+ int ntracksBot = 0;
+
for (Track trk : tracks) {
//boolean isSingleHitPerLayerTrack = singleTrackHitPerLayer(trk);
@@ -945,10 +1078,9 @@
aida.histogram1D("Hits per Track").fill(trk.getTrackerHits().size());
SeedTrack stEle = (SeedTrack) trk;
- SeedCandidate seedEle = stEle.getSeedCandidate();
- HelicalTrackFit ht = seedEle.getHelix();
- HelixConverter converter = new HelixConverter(0);
- StraightLineTrack slt = converter.Convert(ht);
+ SeedCandidate seedCandidate = stEle.getSeedCandidate();
+ HelicalTrackFit helicalTrackFit = seedCandidate.getHelix();
+ StraightLineTrack slt = converter.Convert(helicalTrackFit);
Hep3Vector posAtEcal = TrackUtils.getTrackPositionAtEcal(trk);
@@ -989,7 +1121,7 @@
aida.histogram1D("omega Top").fill(trk.getTrackStates().get(0).getParameter(ParameterName.omega.ordinal()));
aida.histogram1D("tan(lambda) Top").fill(trk.getTrackStates().get(0).getParameter(ParameterName.tanLambda.ordinal()));
aida.histogram1D("z0 Top").fill(trk.getTrackStates().get(0).getParameter(ParameterName.z0.ordinal()));
-
+ ntracksTop++;
} else {
aida.histogram1D("Bottom Track Momentum (Px)").fill(trk.getTrackStates().get(0).getMomentum()[1]);
aida.histogram1D("Bottom Track Momentum (Py)").fill(trk.getTrackStates().get(0).getMomentum()[2]);
@@ -1001,15 +1133,43 @@
aida.histogram1D("omega Bottom").fill(trk.getTrackStates().get(0).getParameter(ParameterName.omega.ordinal()));
aida.histogram1D("tan(lambda) Bottom").fill(trk.getTrackStates().get(0).getParameter(ParameterName.tanLambda.ordinal()));
aida.histogram1D("z0 Bottom").fill(trk.getTrackStates().get(0).getParameter(ParameterName.z0.ordinal()));
-
+ ntracksBot++;
}
List<TrackerHit> hitsOnTrack = trk.getTrackerHits();
+ Map<HpsSiSensor, Integer> stripHitsOnTrack = new HashMap<HpsSiSensor, Integer>();
+
for (TrackerHit hit : hitsOnTrack) {
+
HelicalTrackHit htc = (HelicalTrackHit) hit;
HelicalTrackCross htcross = (HelicalTrackCross) htc;
- double sHit = ht.PathMap().get(htc);
- Hep3Vector posonhelix = HelixUtils.PointOnHelix(ht, sHit);
-
+ double sHit = helicalTrackFit.PathMap().get(htc);
+ Hep3Vector posonhelix = HelixUtils.PointOnHelix(helicalTrackFit, sHit);
+ boolean isTopLayer = false;
+
+
+
+ //HpsSiSensor sensor = ((HpsSiSensor) ((RawTrackerHit) htc.getRawHits().get(0)).getDetectorElement());
+ for(HelicalTrackStrip strip : htcross.getStrips()) {
+ HpsSiSensor sensor = ((HpsSiSensor) ((RawTrackerHit) strip.rawhits().get(0)).getDetectorElement());
+ if(sensor.isTopLayer()) isTopLayer = true;
+ else isTopLayer=false;
+ HelicalTrackStripGbl stripGbl = new HelicalTrackStripGbl(strip, true);
+ Map<String, Double> stripResiduals = TrackUtils.calculateLocalTrackHitResiduals(helicalTrackFit, stripGbl, 0.,0.,_bfield);
+ logger.info("Sensor " + sensor.getName() + " ures = " + stripResiduals.get("ures"));
+ aida.histogram1D(sensor.getName() + " strip residual (mm)").fill(stripResiduals.get("ures"));
+
+
+ if(stripHitsOnTrack.containsKey(sensor)) {
+ stripHitsOnTrack.put(sensor, stripHitsOnTrack.get(sensor) + 1);
+ } else {
+ stripHitsOnTrack.put(sensor, 1);
+ }
+ }
+
+
+
+
+
double yTr = posonhelix.y();
double zTr = posonhelix.z();
int layer = htc.Layer();
@@ -1032,7 +1192,7 @@
if (layer == 11) {
modNum = "Module 6 ";
}
- SymmetricMatrix cov = htc.getCorrectedCovMatrix();
+ //SymmetricMatrix cov = htc.getCorrectedCovMatrix();
aida.histogram1D(modNum + "Residual X(mm)").fill(htcross.getCorrectedPosition().y() - yTr);//these hits should be rotated track hits already
aida.histogram1D(modNum + "Residual Y(mm)").fill(htcross.getCorrectedPosition().z() - zTr);//these hits should be rotated track hits already
@@ -1046,10 +1206,9 @@
aida.histogram1D(modNum + "Residual Y(mm) Bottom").fill(htcross.getCorrectedPosition().z() - zTr);//these hits should be rotated track hits already
}
- HpsSiSensor sensor = ((HpsSiSensor) ((RawTrackerHit) htc.getRawHits().get(0)).getDetectorElement());
double x = htcross.getCorrectedPosition().y();
double y = htcross.getCorrectedPosition().z();
- if(sensor.isTopLayer()) {
+ if(isTopLayer) {
layersTop[htc.Layer() - 1]++;
Hep3Vector sensorPos = ((SiSensor) ((RawTrackerHit) htc.getRawHits().get(0)).getDetectorElement()).getGeometry().getPosition();
if (htc.Layer() == 1) {
@@ -1119,6 +1278,12 @@
}
}
}
+
+ for(Map.Entry<HpsSiSensor,Integer> sensor : stripHitsOnTrack.entrySet()) {
+ aida.histogram1D(sensor.getKey().getName() + " strip hits on track").fill(sensor.getValue());
+ }
+
+
Cluster clust = null;
if(event.hasCollection(Cluster.class,ecalCollectionName)) {
List<Cluster> clusters = event.get(Cluster.class, ecalCollectionName);
@@ -1215,6 +1380,9 @@
}
+ nTracksBot.fill(ntracksBot);
+ nTracksTop.fill(ntracksTop);
+
// e+/e-
Map.Entry<Track, Cluster> ecand_highestP = null;
double e_pmax = -1;
|