2 added + 5 modified, total 7 files
hps-java/src/main/java/org/lcsim/hps/users/mgraham
diff -N HitTimePlotter.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ HitTimePlotter.java 11 Apr 2013 19:16:05 -0000 1.1
@@ -0,0 +1,487 @@
+package org.lcsim.hps.users.mgraham;
+
+import hep.aida.*;
+import hep.physics.vec.Hep3Vector;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.lcsim.detector.identifier.IIdentifier;
+import org.lcsim.detector.identifier.IIdentifierHelper;
+import org.lcsim.detector.tracker.silicon.SiSensor;
+import org.lcsim.event.*;
+import org.lcsim.event.base.BaseTrack;
+import org.lcsim.fit.helicaltrack.HelicalTrackFit;
+import org.lcsim.fit.helicaltrack.HelicalTrackHit;
+import org.lcsim.geometry.Detector;
+import org.lcsim.hps.monitoring.AIDAFrame;
+import org.lcsim.hps.monitoring.Resettable;
+import org.lcsim.hps.readout.ecal.ReadoutTimestamp;
+import org.lcsim.hps.recon.tracking.HPSSVTCalibrationConstants;
+import org.lcsim.hps.recon.tracking.HPSTrack;
+import org.lcsim.hps.recon.vertexing.HelixConverter;
+import org.lcsim.hps.recon.vertexing.StraightLineTrack;
+import org.lcsim.recon.tracking.seedtracker.SeedCandidate;
+import org.lcsim.recon.tracking.seedtracker.SeedTrack;
+import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
+
+/**
+ *
+ * @author mgraham
+ */
+public class HitTimePlotter extends Driver implements Resettable {
+
+ private AIDAFrame plotterFrame;
+ private AIDA aida = AIDA.defaultInstance();
+ IPlotter plotter;
+ IPlotter plotter2;
+ IPlotter plotter3;
+ IPlotter plotter4;
+ IPlotter plotter5;
+ IPlotter plotter6;
+ IPlotter plotter7;
+ IAnalysisFactory fac = aida.analysisFactory();
+ private String trackCollectionName = "MatchedTracks";
+ private String outputPlots = null;
+ private Map<String, Integer> sensorRegionMap;
+ private String trackerName = "Tracker";
+ private List<SiSensor> sensors;
+
+ protected void detectorChanged(Detector detector) {
+ aida.tree().cd("/");
+ plotterFrame = new AIDAFrame();
+ plotterFrame.setTitle("HPS Tracking Plots");
+ sensors = detector.getSubdetector(trackerName).getDetectorElement().findDescendants(SiSensor.class);
+ sensorRegionMap = new HashMap<String, Integer>();
+ for (SiSensor sensor : sensors) {
+ int region = computePlotterRegion(sensor);
+ sensorRegionMap.put(sensor.getName(), region);
+ }
+
+ plotter = fac.createPlotterFactory().create("HPS Tracking Plots");
+ plotter.setTitle("Hit Times");
+ IPlotterStyle style = plotter.style();
+ style.dataStyle().fillStyle().setColor("yellow");
+ style.dataStyle().errorBarStyle().setVisible(false);
+ plotter.createRegions(3, 2);
+ plotterFrame.addPlotter(plotter);
+
+ IHistogram1D ecalHT = aida.histogram1D("ECAL Hit Time", 100, 0, 400);
+ IHistogram1D svtHT = aida.histogram1D("SVT Hit Time", 125, -50, 75);
+ IHistogram1D svtHTCorrected = aida.histogram1D("Trigger Corrected SVT Hit Time", 120, -240, -120);
+ IHistogram1D svtHTModCorrected = aida.histogram1D("Module Corrected SVT Hit Time", 120, -50, 70);
+ IHistogram1D svtHTCorrectedZoom = aida.histogram1D("Trigger Corrected SVT Hit Time Zoom", 80, -206, -166);
+ IHistogram1D svtHTModCorrectedZoom = aida.histogram1D("Module Corrected SVT Hit Time Zoom", 80, -20, 20);
+ plotter.region(0).plot(ecalHT);
+ plotter.region(1).plot(svtHT);
+ plotter.region(2).plot(svtHTCorrected);
+ plotter.region(3).plot(svtHTModCorrected);
+ plotter.region(4).plot(svtHTCorrectedZoom);
+ plotter.region(5).plot(svtHTModCorrectedZoom);
+ /*
+ * plotter.setTitle("Momentum"); IPlotterStyle style = plotter.style();
+ * style.dataStyle().fillStyle().setColor("yellow");
+ * style.dataStyle().errorBarStyle().setVisible(false);
+ * plotter.createRegions(2, 3); plotterFrame.addPlotter(plotter);
+ *
+ * IHistogram1D trkPx = aida.histogram1D("Track Momentum (Px)", 25,
+ * -0.25, 0.25); IHistogram1D trkPy = aida.histogram1D("Track Momentum
+ * (Py)", 25, -0.1, 0.1); IHistogram1D trkPz = aida.histogram1D("Track
+ * Momentum (Pz)", 25, 0, 3.5); IHistogram1D trkChi2 =
+ * aida.histogram1D("Track Chi2", 25, 0, 25.0); IHistogram1D xAtConvert
+ * = aida.histogram1D("X (mm) @ Converter", 50, -50, 50); IHistogram1D
+ * yAtConvert = aida.histogram1D("Y (mm) @ Converter", 50, -20, 20);
+ * plotter.region(0).plot(trkPx); plotter.region(1).plot(trkPy);
+ * plotter.region(2).plot(trkPz); plotter.region(3).plot(trkChi2);
+ * plotter.region(4).plot(xAtConvert);
+ * plotter.region(5).plot(yAtConvert);
+ */
+
+ plotter2 = fac.createPlotterFactory().create("HPS Tracking Plots");
+ plotter2.setTitle("Inner Tracker");
+ IPlotterStyle style2 = plotter2.style();
+ style2.dataStyle().fillStyle().setColor("yellow");
+ style2.dataStyle().errorBarStyle().setVisible(false);
+ plotter2.createRegions(6, 2);
+ plotterFrame.addPlotter(plotter2);
+
+ plotter3 = fac.createPlotterFactory().create("HPS Tracking Plots");
+ plotter3.setTitle("Outer Tracker");
+ plotter3.setStyle(style2);
+ plotter3.createRegions(6, 4);
+ plotterFrame.addPlotter(plotter3);
+
+ plotter4 = fac.createPlotterFactory().create("HPS Tracking Plots");
+ plotter4.setTitle("Corrected Times: Inner Tracker");
+ IPlotterStyle style4 = plotter4.style();
+ style4.dataStyle().fillStyle().setColor("yellow");
+ style4.dataStyle().errorBarStyle().setVisible(false);
+ plotter4.createRegions(6, 2);
+ plotterFrame.addPlotter(plotter4);
+
+ plotter5 = fac.createPlotterFactory().create("HPS Tracking Plots");
+ plotter5.setTitle("Outer Tracker");
+ plotter5.setStyle(style2);
+ plotter5.createRegions(6, 4);
+ plotterFrame.addPlotter(plotter5);
+
+
+ int region = 0;
+ for (SiSensor sensor : sensors) {
+ IHistogram1D svtTimePlot = aida.histogram1D(sensor.getName() + "_Time", 60, -200, -170);
+ IHistogram1D svtCorTimePlot = aida.histogram1D(sensor.getName() + "_CorrectedTime", 100, -100, 100);
+// int region = sensorRegionMap.get(sensor.getName()); // this doesn't work anymore...
+ IIdentifierHelper helper = sensor.getIdentifierHelper();
+ IIdentifier id = sensor.getIdentifier();
+
+ int layer = helper.getValue(id, "layer"); // 1-12; axial layers are odd layers; stereo layers are even
+ int module = helper.getValue(id, "module");
+
+ svtTimePlot.setTitle("Layer " + layer + " Module " + module);
+ if (region < 12) {
+ plotter2.region(region).plot(svtTimePlot);
+ plotter4.region(region).plot(svtCorTimePlot);
+ region++;
+ } else {
+ plotter3.region(region - 12).plot(svtTimePlot);
+ plotter5.region(region - 12).plot(svtCorTimePlot);
+ region++;
+ }
+ }
+
+
+ plotter6 = fac.createPlotterFactory().create("HPS Tracking Plots");
+ plotter6.setTitle("Tracks");
+ plotter6.setStyle(style2);
+ plotter6.createRegions(2, 2);
+ plotterFrame.addPlotter(plotter6);
+ IHistogram1D px = aida.histogram1D("Track Momentum(Px)", 50, -0.2, 0.2);
+ IHistogram1D py = aida.histogram1D("Track Momentum(Py)", 50, -0.2, 0.2);
+ IHistogram1D pz = aida.histogram1D("Track Momentum(Pz)", 50, 0, 2.2);
+ IHistogram1D chi2 = aida.histogram1D("TrackChi2", 50, 0, 25);
+ plotter6.region(0).plot(px);
+ plotter6.region(1).plot(py);
+ plotter6.region(2).plot(pz);
+ plotter6.region(3).plot(chi2);
+
+
+ plotter7 = fac.createPlotterFactory().create("HPS Tracking Plots");
+ plotter7.setTitle("Per Event");
+ plotter7.setStyle(style2);
+ plotter7.createRegions(2, 2);
+ plotterFrame.addPlotter(plotter7);
+
+ IHistogram1D nclus = aida.histogram1D("Strip Clusters per Event", 100, 0, 99);
+ IHistogram1D nhth = aida.histogram1D("Stereo Hits per Event", 100, 0, 99);
+ IHistogram1D ntrk = aida.histogram1D("Tracks per Event", 40, 0, 39);
+
+ plotter7.region(0).plot(nclus);
+ plotter7.region(1).plot(nhth);
+ plotter7.region(2).plot(ntrk);
+
+
+
+ plotterFrame.pack();
+ plotterFrame.setVisible(true);
+ }
+
+ public void process(EventHeader event) {
+ aida.tree().cd("/");
+
+ List<TrackerHit> trackerHits = event.get(TrackerHit.class, "StripClusterer_SiTrackerHitStrip1D");
+ List<CalorimeterHit> ecalHits = event.get(CalorimeterHit.class, "EcalCalHits");
+
+
+ List<HelicalTrackHit> hth = event.get(HelicalTrackHit.class, "HelicalTrackHits");
+ // System.out.println("Event with ECal timestamp " + ReadoutTimestamp.getTimestamp(ReadoutTimestamp.SYSTEM_ECAL, event)
+// + ", SVT timestamp " + ReadoutTimestamp.getTimestamp(ReadoutTimestamp.SYSTEM_TRACKER, event)
+// + ", Trigger timestamp " + ReadoutTimestamp.getTimestamp(ReadoutTimestamp.SYSTEM_TRIGGER, event));
+ double t0Ecal = ReadoutTimestamp.getTimestamp(ReadoutTimestamp.SYSTEM_ECAL, event);
+ double t0Svt = ReadoutTimestamp.getTimestamp(ReadoutTimestamp.SYSTEM_TRACKER, event);
+ double t0Trig = ReadoutTimestamp.getTimestamp(ReadoutTimestamp.SYSTEM_TRIGGER, event);
+ for (CalorimeterHit hit : ecalHits) {
+ double cor = hit.getTime() + (t0Ecal - t0Trig);
+ aida.histogram1D("ECAL Hit Time").fill(hit.getTime());
+// aida.histogram1D("Trigger Corrected ECAL Hit Time").fill(cor);
+// System.out.println("Ecal: " + (hit.getTime()) + "; Corrected = " + cor);
+ }
+ for (TrackerHit hit : trackerHits) {
+
+ IIdentifierHelper helper = ((RawTrackerHit) hit.getRawHits().get(0)).getIdentifierHelper();
+ IIdentifier id = ((RawTrackerHit) hit.getRawHits().get(0)).getIdentifier();
+ int layer = helper.getValue(id, "layer"); // 1-10; axial layers are odd layers; stereo layers are even
+ int module = helper.getValue(id, "module"); // 0-1; module number is top or bottom
+
+ String sensorName = ((RawTrackerHit) hit.getRawHits().get(0)).getDetectorElement().getName();
+ double cor = hit.getTime() + (t0Svt - t0Trig);
+ double corMod = cor - getT0Shift(layer, module);
+ aida.histogram1D("SVT Hit Time").fill(hit.getTime());
+ aida.histogram1D("Trigger Corrected SVT Hit Time").fill(cor);
+ aida.histogram1D("Module Corrected SVT Hit Time").fill(corMod);
+ aida.histogram1D("Trigger Corrected SVT Hit Time Zoom").fill(cor);
+ aida.histogram1D("Module Corrected SVT Hit Time Zoom").fill(corMod);
+ aida.histogram1D(sensorName + "_Time").fill(cor);
+ aida.histogram1D(sensorName + "_CorrectedTime").fill(corMod);
+
+ //System.out.println("Svt: " + (hit.getTime()) + "; Corrected = " + cor+"; Module Corrected = " + corMod);
+ }
+ if (!event.hasCollection(Track.class, trackCollectionName)) {
+ return;
+ }
+ List<Track> tracks = event.get(Track.class, trackCollectionName);
+
+ for (Track trk : tracks) {
+ aida.histogram1D("Track Momentum(Px)").fill(trk.getPY());
+ aida.histogram1D("Track Momentum(Py)").fill(trk.getPZ());
+ aida.histogram1D("Track Momentum(Pz)").fill(trk.getPX());
+ aida.histogram1D("TrackChi2").fill(trk.getChi2());
+ }
+
+ aida.histogram1D("Strip Clusters per Event").fill(trackerHits.size());
+ aida.histogram1D("Stereo Hits per Event").fill(hth.size());
+ aida.histogram1D("Tracks per Event").fill(tracks.size());
+
+ }
+
+ private int computePlotterRegion(SiSensor sensor) {
+
+ IIdentifierHelper helper = sensor.getIdentifierHelper();
+ IIdentifier id = sensor.getIdentifier();
+
+ int layer = helper.getValue(id, "layer"); // 1-12; axial layers are odd layers; stereo layers are even
+ int module = helper.getValue(id, "module"); // 0-1; module number is top (evens) or bottom (odds)
+ int region = -99;
+ // Compute the sensor's x and y grid coordinates and then translate to region number.
+ int ix, iy;
+ if (layer < 7) {
+ ix = (layer - 1) / 2;
+ iy = 0;
+ if (module > 0) {
+ iy += 2;
+ }
+ if (layer % 2 == 0) {
+ iy += 1;
+ }
+ region = ix * 2 + iy;
+ } else {
+ ix = (layer - 7) / 2;
+ iy = module;
+
+ region = ix * 4 + iy;
+ region += 100;
+ }
+ System.out.println(sensor.getName() + "; lyr=" + layer + "; mod=" + module + " -> xy[" + ix + "][" + iy + "] -> reg=" + region);
+
+ return region;
+ }
+
+ @Override
+ public void reset() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public void setOutputPlots(String output) {
+ this.outputPlots = output;
+ }
+
+ public void endOfData() {
+ System.out.println("Output");
+ IFitFactory fitFactory = fac.createFitFactory();
+ IFitter fitter = fitFactory.createFitter("chi2");
+
+ for (SiSensor sensor : sensors) {
+ IHistogram1D svtTimePlot = aida.histogram1D(sensor.getName() + "_Time", 150, -250, -100);
+ IHistogram1D svtCorTimePlot = aida.histogram1D(sensor.getName() + "_CorrectedTime", 100, -100, 100);
+// int region = sensorRegionMap.get(sensor.getName()); // this doesn't work anymore...
+ IIdentifierHelper helper = sensor.getIdentifierHelper();
+ IIdentifier id = sensor.getIdentifier();
+
+ int layer = helper.getValue(id, "layer"); // 1-12; axial layers are odd layers; stereo layers are even
+ int module = helper.getValue(id, "module");
+ IHistogram1D hist = aida.histogram1D(sensor.getName() + "_Time");
+ System.out.println("Number of entries = " + hist.allEntries());
+ IFitResult result = fitter.fit(hist, "g");
+
+// System.out.println(sensor.getName() + " Peak Position = " + getPeakPosition(aida.histogram1D(sensor.getName() + "_Time")));
+ System.out.println(sensor.getName() + " " + result.fittedParameterNames()[0] + " = " + result.fittedParameters()[0] + " +/- " + result.errors()[0]);
+ System.out.println(sensor.getName() + " " + result.fittedParameterNames()[1] + " = " + result.fittedParameters()[1] + " +/- " + result.errors()[1]);
+ System.out.println(sensor.getName() + " " + result.fittedParameterNames()[2] + " = " + result.fittedParameters()[2] + " +/- " + result.errors()[2]);
+
+ }
+
+ IHistogram1D hist = aida.histogram1D("Trigger Corrected SVT Hit Time Zoom");
+ System.out.println("Number of entries = " + hist.allEntries());
+ IFitResult result = fitter.fit(hist, "g");
+
+// System.out.println(sensor.getName() + " Peak Position = " + getPeakPosition(aida.histogram1D(sensor.getName() + "_Time")));
+ System.out.println("Trigger Corrected SVT Hit Time Zoom " + result.fittedParameterNames()[0] + " = " + result.fittedParameters()[0] + " +/- " + result.errors()[0]);
+ System.out.println("Trigger Corrected SVT Hit Time Zoom " + result.fittedParameterNames()[1] + " = " + result.fittedParameters()[1] + " +/- " + result.errors()[1]);
+ System.out.println("Trigger Corrected SVT Hit Time Zoom " + result.fittedParameterNames()[2] + " = " + result.fittedParameters()[2] + " +/- " + result.errors()[2]);
+
+ hist = aida.histogram1D("Module Corrected SVT Hit Time Zoom");
+ System.out.println("Number of entries = " + hist.allEntries());
+ result = fitter.fit(hist, "g");
+
+// System.out.println(sensor.getName() + " Peak Position = " + getPeakPosition(aida.histogram1D(sensor.getName() + "_Time")));
+ System.out.println("Module Corrected SVT Hit Time Zoom " + result.fittedParameterNames()[0] + " = " + result.fittedParameters()[0] + " +/- " + result.errors()[0]);
+ System.out.println("Module Corrected SVT Hit Time Zoom " + result.fittedParameterNames()[1] + " = " + result.fittedParameters()[1] + " +/- " + result.errors()[1]);
+ System.out.println("Module Corrected SVT Hit Time Zoom " + result.fittedParameterNames()[2] + " = " + result.fittedParameters()[2] + " +/- " + result.errors()[2]);
+
+
+ if (outputPlots != null) {
+ try {
+ aida.saveAs(outputPlots);
+ } catch (IOException ex) {
+ Logger.getLogger(HitTimePlotter.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
+ }
+
+ private double getPeakPosition(IHistogram1D hist) {
+ int nbins = hist.axis().bins();
+ int maxBin = -99;
+ int max = -99;
+ for (int i = 0; i < nbins; i++) {
+ if (hist.binEntries(i) > max) {
+ maxBin = i;
+ max = hist.binEntries(i);
+ }
+ }
+ return hist.binMean(maxBin);
+
+ }
+
+ private double getT0Shift(int layer, int module) {
+ double value = 0;
+ switch (module) {
+ case 0:
+ switch (layer) {
+ case 1:
+ value = -186.1;
+ break;
+ case 2:
+ value = -186.1;
+ break;
+ case 3:
+ value = -185.8;
+ break;
+ case 4:
+ value = -185.9;
+ break;
+ case 5:
+ value = -185.8;
+ break;
+ case 6:
+ value = -185.8;
+ break;
+ case 7:
+ value = -185.8;
+ break;
+ case 8:
+ value = -185.9;
+ break;
+ case 9:
+ value = -185.8;
+ break;
+ case 10:
+ value = -185.8;
+ break;
+ case 11:
+ value = -185.6;
+ break;
+ case 12:
+ value = -186.0;
+ break;
+ }
+ break;
+ case 1:
+ switch (layer) {
+ case 1:
+ value = -185.6;
+ break;
+ case 2:
+ value = -185.3;
+ break;
+ case 3:
+ value = -185.9;
+ break;
+ case 4:
+ value = -185.7;
+ break;
+ case 5:
+ value = -185.6;
+ break;
+ case 6:
+ value = -185.9;
+ break;
+ case 7:
+ value = -185.8;
+ break;
+ case 8:
+ value = -186.1;
+ break;
+ case 9:
+ value = -186.0;
+ break;
+ case 10:
+ value = -185.9;
+ break;
+ case 11:
+ value = -185.9;
+ break;
+ case 12:
+ value = -186.1;
+ break;
+ }
+ break;
+ case 2:
+ switch (layer) {
+ case 7:
+ value = -185.7;
+ break;
+ case 8:
+ value = -185.7;
+ break;
+ case 9:
+ value = -185.9;
+ break;
+ case 10:
+ value = -186.0;
+ break;
+ case 11:
+ value = -185.8;
+ break;
+ case 12:
+ value = -185.9;
+ break;
+ }
+ break;
+ case 3:
+ switch (layer) {
+ case 7:
+ value = -185.5;
+ break;
+ case 8:
+ value = -185.6;
+ break;
+ case 9:
+ value = -185.5;
+ break;
+ case 10:
+ value = -185.5;
+ break;
+ case 11:
+ value = -186.6;
+ break;
+ case 12:
+ value = -186.7;
+ break;
+ }
+ break;
+ }
+ return value;
+ }
+}
hps-java/src/main/java/org/lcsim/hps/users/mgraham
diff -u -r1.7 -r1.8
--- DetailedAnalysisDriver.java 9 Apr 2013 22:03:05 -0000 1.7
+++ DetailedAnalysisDriver.java 11 Apr 2013 19:16:05 -0000 1.8
@@ -56,8 +56,8 @@
import org.lcsim.util.aida.AIDA;
/**
-
- @author mgraham
+ *
+ * @author mgraham
*/
public class DetailedAnalysisDriver extends Driver {
@@ -125,7 +125,7 @@
PrintWriter pw;
double[] beamsize = {0.001, 0.02, 0.02};
int flipsign = 1;
-
+ public String _rawHitsName="SVTRawTrackerHits";
public DetailedAnalysisDriver(int layers) {
// nlayers[0] = layers;
// Define the efficiency histograms
@@ -146,14 +146,14 @@
d0effElectrons = hf.createProfile1D("Electrons Efficiency vs d0", "", 20, -1., 1.);
z0effElectrons = hf.createProfile1D("Electrons Efficiency vs z0", "", 20, -1., 1.);
/*
- peffAxial = hf.createProfile1D("Axial Efficiency vs p", "", 20, 0.,
- beamP); thetaeffAxial = hf.createProfile1D("Axial Efficiency vs theta",
- "", 20, 80, 100); phieffAxial = hf.createProfile1D("Axial Efficiency vs
- phi", "", 25, -0.25, 0.25); ctheffAxial = hf.createProfile1D("Axial
- Efficiency vs cos(theta)", "", 25, -0.25, 0.25); d0effAxial =
- hf.createProfile1D("Axial Efficiency vs d0", "", 20, -1., 1.);
- z0effAxial = hf.createProfile1D("Axial Efficiency vs z0", "", 20, -1.,
- 1.);
+ * peffAxial = hf.createProfile1D("Axial Efficiency vs p", "", 20, 0.,
+ * beamP); thetaeffAxial = hf.createProfile1D("Axial Efficiency vs
+ * theta", "", 20, 80, 100); phieffAxial = hf.createProfile1D("Axial
+ * Efficiency vs phi", "", 25, -0.25, 0.25); ctheffAxial =
+ * hf.createProfile1D("Axial Efficiency vs cos(theta)", "", 25, -0.25,
+ * 0.25); d0effAxial = hf.createProfile1D("Axial Efficiency vs d0", "",
+ * 20, -1., 1.); z0effAxial = hf.createProfile1D("Axial Efficiency vs
+ * z0", "", 20, -1., 1.);
*/
cthfake = hf.createProfile1D("Fake rate vs cos(theta)", "", 25, -0.25, 0.25);
phifake = hf.createProfile1D("Fake rate vs phi", "", 25, -0.25, 0.25);
@@ -179,13 +179,14 @@
VzEffFindable = hf.createProfile1D("Aprime Efficiency vs Vz: Findable", "", 40, -0.2, 0.2);
int i, j;
- for (i = 0; i < 1; i++)
+ for (i = 0; i < 1; i++) {
for (j = 0; j < nlayers[i]; j++) {
int laynum = j + 1;
String profname = detNames[i] + "_layer" + laynum + " cluster size vs y";
String key = detNames[i] + "_layer" + laynum;
clsizeMap.put(key, hf.createProfile1D(profname, 20, -15, 15));
}
+ }
}
@Override
@@ -196,10 +197,14 @@
System.out.println("Setting nlayers to " + nlayers[0]);
}
+ public void setRawHitsName(String rhname){
+ _rawHitsName=rhname;
+ }
+
@Override
public void process(
EventHeader event) {
- if (nevt == 0)
+ if (nevt == 0) {
try {
//open things up
fw = new FileWriter(outputTextName);
@@ -207,6 +212,7 @@
} catch (IOException ex) {
Logger.getLogger(DetailedAnalysisDriver.class.getName()).log(Level.SEVERE, null, ex);
}
+ }
// Increment the event counter
nevt++;
String resDir = "residualsPlots/";
@@ -224,9 +230,20 @@
flipsign = -1;
}
- List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, "RawTrackerHitMaker_RawTrackerHits");
+ List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, _rawHitsName);
List<SiTrackerHitStrip1D> stripHits = event.get(SiTrackerHitStrip1D.class, "StripClusterer_SiTrackerHitStrip1D");
- // dump SThit information
+ //for (SiTrackerHitStrip1D cluster : stripHits) {
+ // Hep3Vector measPos = cluster.getPositionAsVector();
+ // double measdedx = cluster.getdEdx() * 1000.0;
+ // Set<SimTrackerHit> SthFromRth = cluster.getSimHits();
+ // if (SthFromRth.size() > 0) {
+ // Hep3Vector mcPos = SthFromRth.iterator()
+ //then do somthing with mcPos & measPos...
+ // }
+ //}
+ System.out.println("RawHits Size = "+rawHits.size());
+
+ // dump SThit information
String[] input_hit_collections = {"TrackerHits"};
for (String input : input_hit_collections) {
List<SimTrackerHit> sthits = event.getSimTrackerHits(input);
@@ -243,10 +260,12 @@
nhits[layer]++;
double hitwgt = 0;
double clhitwgt = 0;
+
for (RawTrackerHit rth : rawHits) {
List<SimTrackerHit> SthFromRth = rth.getSimTrackerHits();
- if (SthFromRth.contains(st))
+ if (SthFromRth!=null &&SthFromRth.contains(st)) {
hitwgt = 1.0;
+ }
}
for (SiTrackerHitStrip1D cluster : stripHits) {
double measdedx = cluster.getdEdx() * 1000.0;
@@ -255,11 +274,12 @@
for (RawTrackerHit rth : RthFromSith) {
List<SimTrackerHit> SthFromRth = rth.getSimTrackerHits();
- if (SthFromRth.contains(st)) {
+ if (SthFromRth!=null &&SthFromRth.contains(st)) {
clhitwgt = 1.0;
double totdedx = 0;
- for (SimTrackerHit sthtemp : SthFromRth)
+ for (SimTrackerHit sthtemp : SthFromRth) {
totdedx = totdedx + sthtemp.getdEdx() * 1000.0;
+ }
aida.histogram1D(simDir + "delta dEdX", 50, -0.2, 0.2).fill(measdedx - totdedx);
aida.histogram1D(simDir + "fractional dEdX", 50, -1, 1.).fill((measdedx - totdedx) / totdedx);
aida.cloud1D(simDir + "fractional dEdX Cloud").fill((measdedx - totdedx) / totdedx);
@@ -290,8 +310,9 @@
}
int i = 0;
while (i < nlayers[0]) {
- if (nhits[i] > 0)
+ if (nhits[i] > 0) {
aida.cloud1D(simDir + input + "layer " + i + " number of ST hits").fill(nhits[i]);
+ }
i++;
}
}
@@ -315,19 +336,22 @@
String rhDetName = rhDetE.getName();
int rhLayer = rh.getLayerNumber();
- for (String myname : detNames)
+ for (String myname : detNames) {
if (rhDetName.contains(myname)) {
String detlayer = myname + "_" + rhLayer;
Integer myint = occupancyMap.get(detlayer);
- if (myint == null)
+ if (myint == null) {
myint = 1;
+ }
myint++;
occupancyMap.put(detlayer, myint);
}
+ }
}
Set<String> mykeyset = (Set<String>) occupancyMap.keySet();
- for (String keys : mykeyset)
+ for (String keys : mykeyset) {
aida.cloud1D(occDir + keys + " # of hits").fill(occupancyMap.get(keys));
+ }
for (SiTrackerHitStrip1D stripCluster : stripHits) {
Hep3Vector strCluPos = stripCluster.getPositionAsVector();
@@ -343,14 +367,17 @@
String detlayer = "Foobar";
Hep3Vector sthPos = new BasicHep3Vector();
for (RawTrackerHit rth : rthList) {
- if (rth.getSimTrackerHits().size() > 0)
+ if (rth.getSimTrackerHits().size() > 0) {
sthPos = rth.getSimTrackerHits().get(0).getPositionVec();
+ }
IDetectorElement rhDetE = rth.getDetectorElement();
String rhDetName = rhDetE.getName();
int rhLayer = rth.getLayerNumber();
- for (String myname : detNames)
- if (rhDetName.contains(myname))
+ for (String myname : detNames) {
+ if (rhDetName.contains(myname)) {
detlayer = myname + "_layer" + rhLayer;
+ }
+ }
}
Hep3Vector resid = VecOp.sub(strCluPos, sthPos);
double magResid = resid.magnitude();
@@ -364,9 +391,11 @@
// List<LCRelation> mcrelations = event.get(LCRelation.class, "HelicalTrackMCRelations");
List<LCRelation> mcrelations = event.get(LCRelation.class, "RotatedHelicalTrackMCRelations");
- for (LCRelation relation : mcrelations)
- if (relation != null && relation.getFrom() != null && relation.getTo() != null)
+ for (LCRelation relation : mcrelations) {
+ if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
hittomc.add(relation.getFrom(), relation.getTo());
+ }
+ }
// RelationalTable hittomcAxial = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
//// List<LCRelation> mcrelations = event.get(LCRelation.class, "HelicalTrackMCRelations");
@@ -402,10 +431,13 @@
List<List<SimTrackerHit>> simcols = event.get(SimTrackerHit.class);
// Loop over the SimTrackerHits and fill in the relational table
- for (List<SimTrackerHit> simlist : simcols)
- for (SimTrackerHit simhit : simlist)
- if (simhit.getMCParticle() != null)
+ for (List<SimTrackerHit> simlist : simcols) {
+ for (SimTrackerHit simhit : simlist) {
+ if (simhit.getMCParticle() != null) {
mcHittomcP.add(simhit, simhit.getMCParticle());
+ }
+ }
+ }
Map<Track, TrackAnalysis> tkanalMap = new HashMap<Track, TrackAnalysis>();
RelationalTable nearestHitToTrack = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
@@ -433,10 +465,12 @@
double slopeErr = Math.sqrt(track.getErrorMatrix().e(HelicalTrackFit.slopeIndex, HelicalTrackFit.slopeIndex));
double curveErr = Math.sqrt(track.getErrorMatrix().e(HelicalTrackFit.curvatureIndex, HelicalTrackFit.curvatureIndex));
_nchRec++;
- if (track.getCharge() * flipsign < 0)
+ if (track.getCharge() * flipsign < 0) {
_neleRec++;
- if (track.getCharge() * flipsign > 0)
+ }
+ if (track.getCharge() * flipsign > 0) {
_nposRec++;
+ }
SeedTrack stEle = (SeedTrack) track;
SeedCandidate seedEle = stEle.getSeedCandidate();
@@ -489,20 +523,24 @@
// aida.cloud1D(trackdir + "Number of Axial hits for all tracks").fill(nAxial);
aida.cloud1D(trackdir + "Number of Z hits for all tracks").fill(nZ);
- for (Integer bhit : badLayers)
+ for (Integer bhit : badLayers) {
aida.histogram1D(trackdir + "Layer of Bad Hit", nlayers[0], 1, nlayers[0] + 1).fill(bhit);
+ }
// Generate a normalized histogram after 1000 events
trk_count++;
- if (nevt <= 1000)
+ if (nevt <= 1000) {
fakes.fill(nbad);
+ }
// Make plots for fake, non-fake, and all tracks
if (purity < 0.5) {
- if (track.getCharge() * flipsign < 0)
+ if (track.getCharge() * flipsign < 0) {
_neleFake++;
- if (track.getCharge() * flipsign > 0)
+ }
+ if (track.getCharge() * flipsign > 0) {
_nposFake++;
+ }
cthfake.fill(cth, 1.0);
phifake.fill(phi, 1.0);
pfake.fill(p, 1.0);
@@ -510,10 +548,12 @@
fillTrackInfo(trackdir, "fake tracks", track.getChi2(), nhits, p, pperp, px, py, pz, phi, cth, d0, xoca, yoca, z0);
} else {
- if (track.getCharge() * flipsign < 0)
+ if (track.getCharge() * flipsign < 0) {
_neleTru++;
- if (track.getCharge() * flipsign > 0)
+ }
+ if (track.getCharge() * flipsign > 0) {
_nposTru++;
+ }
cthfake.fill(cth, 0.0);
phifake.fill(phi, 0.0);
pfake.fill(p, 0.0);
@@ -524,8 +564,9 @@
}
fillTrackInfo(trackdir, "all tracks", track.getChi2(), nhits, p, pperp, px, py, pz, phi, cth, d0, xoca, yoca, z0);
- if (nbadZ == 3)
+ if (nbadZ == 3) {
fillTrackInfo(trackdir, "3 Bad Z-hits", track.getChi2(), nhits, p, pperp, px, py, pz, phi, cth, d0, xoca, yoca, z0);
+ }
// System.out.println("Track info :");
// System.out.println("\t charge = " + track.getCharge() * flipsign);
@@ -591,8 +632,9 @@
String tkresid = "TrackResiduals/";
int ndaug = 0;
- if (bestmcp != null)
+ if (bestmcp != null) {
ndaug = bestmcp.getDaughters().size();
+ }
double mcmom = 0;
double prevmom = 0;
@@ -604,8 +646,9 @@
HelicalTrackHit htc = (HelicalTrackHit) hit;
List<MCParticle> mcpsHTH = htc.getMCParticles();
int isbad = 0;
- if (mcpsHTH.isEmpty() || mcpsHTH.size() > 1 || !mcpsHTH.contains(bestmcp))
+ if (mcpsHTH.isEmpty() || mcpsHTH.size() > 1 || !mcpsHTH.contains(bestmcp)) {
isbad = 1;
+ }
double sHit = ht.PathMap().get(htc);
Hep3Vector posonhelix = HelixUtils.PointOnHelix(ht, sHit);
double yTr = posonhelix.y();
@@ -623,8 +666,9 @@
mytotchi2 += Math.pow((z - zTr) / zerr, 2);
int htlayer = htc.Layer();
- if (htlayer == 1)
+ if (htlayer == 1) {
l1DeltaZ.put(track, z - zTr);
+ }
if (purity == 1 && track.getCharge() * flipsign > 0 && nhits == 10) {
if (clusterlist.get(0).rawhits().size() == 1 && clusterlist.get(1).rawhits().size() == 1) {
@@ -671,26 +715,32 @@
HelicalTrackStrip nearest = getNearestHit(cl, toththits);
if (layer == 1) {
Double l1Dist = getNearestDistance(cl, toththits);
- if (l1Dist != null)
+ if (l1Dist != null) {
l1Isolation.put(track, l1Dist);
+ }
}
- if (nearest != null)
+ if (nearest != null) {
nearestHitToTrack.add(track, nearest);
+ }
int badCl = 0;
- if (mcps.isEmpty() || mcps.size() > 1 || !mcps.contains(bestmcp))
+ if (mcps.isEmpty() || mcps.size() > 1 || !mcps.contains(bestmcp)) {
badCl = 1;
- if (badCl == 1)
+ }
+ if (badCl == 1) {
if (mcps.size() > 0 && mcps.get(0) != null) {
MCParticle tmpmc = mcps.get(0);
aida.cloud1D(hitdir + layer + " Momentum of bad hit ").fill(tmpmc.getMomentum().magnitude());
aida.cloud1D(hitdir + layer + " PDGID of bad hit ").fill(tmpmc.getPDGID());
- for (MCParticle mymc : tmpmc.getParents())
+ for (MCParticle mymc : tmpmc.getParents()) {
aida.cloud1D(hitdir + layer + " PDGID of bad hit mother ").fill(mymc.getPDGID());
+ }
}
+ }
String label = "False hit";
- if (badCl == 0)
+ if (badCl == 0) {
label = "True Hit ";
+ }
SimTrackerHit mcbesthit;
Set<SimTrackerHit> mchitlist = mcHittomcP.allTo(bestmcp);
@@ -714,8 +764,9 @@
double axdotu = VecOp.dot(cl.u(), axial);
boolean isAxial = false;
- if (axdotu > 0.5)
+ if (axdotu > 0.5) {
isAxial = true;
+ }
// aida.cloud2D(hitdir + layer + " y vs z " + label).fill(z, y);
if (isAxial) {
aida.cloud1D(hitdir + layer + " y " + label).fill(clvec.y());
@@ -742,8 +793,9 @@
double wgt = 1. / trk_count;
for (int i = 0; i < 10; i++) {
System.out.println(" Entries: " + fakes.binEntries(i) + " for mismatches: " + i);
- for (int j = 0; j < fakes.binHeight(i); j++)
+ for (int j = 0; j < fakes.binHeight(i); j++) {
nfakes.fill(i, wgt);
+ }
}
System.out.println("Normalization: " + nfakes.sumAllBinHeights() + " after ntrk = " + trk_count);
}
@@ -789,8 +841,9 @@
for (RawTrackerHit rhit : rawhits) {
String deName = rhit.getDetectorElement().getName();
- if (deName.contains("sensor1"))
+ if (deName.contains("sensor1")) {
stripdir = "stereo";
+ }
// System.out.println("Layer number " + rhit.getLayerNumber() + " " + deName);
List<SimTrackerHit> sthits = rhit.getSimTrackerHits();
int nsthits = sthits.size();
@@ -809,14 +862,17 @@
// System.out.println("filling...");
if (umc != -999999) {
aida.histogram1D(debugDir + hit.Detector() + "dedx", 50, 0, 0.3).fill(charge);
- if (umc < 1 && umc > -1)
+ if (umc < 1 && umc > -1) {
aida.cloud2D(debugDir + hit.Detector() + "cluster reco vs cluster mc").fill(umeas - umc, umc);
+ }
aida.cloud2D(debugDir + hit.Detector() + "cluster vs STHit dedx").fill(stenergy, charge);
aida.cloud2D(debugDir + hit.Detector() + "cluster dedx vs delte(u)").fill(umeas - umc, charge);
- if (stripdir.contains("stereo"))
+ if (stripdir.contains("stereo")) {
du_stereo = umeas - umc;
- if (stripdir.contains("axial"))
+ }
+ if (stripdir.contains("axial")) {
du_axial = umeas - umc;
+ }
aida.histogram1D(debugDir + "layer=" + layer + " delta(u)", 50, -0.03, 0.03).fill(umeas - umc);
aida.histogram1D(debugDir + hit.Detector() + " delta(u)", 50, -0.03, 0.03).fill(umeas - umc);
if (nstrips == 1) {
@@ -850,8 +906,9 @@
TrackAnalysis tkanal = tkanalMap.get(track);
// Calculate purity and make appropriate plots
MCParticle mcp = tkanal.getMCParticleNew();
- if (mcp == null)
+ if (mcp == null) {
continue;
+ }
if (mcp.getParents().size() == 1 && mcp.getParents().get(0).getPDGID() == 622) {
int nhits = tkanal.getNHitsNew();
double px = track.getPX();
@@ -932,8 +989,9 @@
aida.cloud1D(apdir + "e+e- Invariant Mass").fill(invMassUC);
- if (eleMC != null && posMC != null && ele == eleID && pos == posID)
+ if (eleMC != null && posMC != null && ele == eleID && pos == posID) {
aida.cloud1D(apdir + "Matched A' Invariant Mass").fill(invMassUC);
+ }
BilliorVertexer bconvertexer = new BilliorVertexer(bfield);
@@ -1014,16 +1072,19 @@
//it's the A'...let's see if we found both tracks.
List<MCParticle> daughters = mcp.getDaughters();
for (MCParticle d : daughters) {
- if (trktomc.allTo(d).isEmpty())
+ if (trktomc.allTo(d).isEmpty()) {
bothreco = false;
+ }
// if (findable.LayersHit(d) != nlayers[0])
// if (!findable.InnerTrackerIsFindable(d, nlayers[0] - 2))
- if (!findable.InnerTrackerIsFindable(d, nlayers[0]))
+ if (!findable.InnerTrackerIsFindable(d, nlayers[0])) {
bothfindable = false;
+ }
}
double vtxWgt = 0;
- if (bothreco)
+ if (bothreco) {
vtxWgt = 1.0;
+ }
VxEff.fill(mcp.getOriginX(), vtxWgt);
VyEff.fill(mcp.getOriginY(), vtxWgt);
VzEff.fill(mcp.getOriginZ(), vtxWgt);
@@ -1039,12 +1100,14 @@
int nmulthits = 0;
for (Track trk : trklist) {
TrackAnalysis tkanal = tkanalMap.get(trk);
- if (tkanal.getNBadHits() < tkanal.getNHits() - 1)
+ if (tkanal.getNBadHits() < tkanal.getNHits() - 1) {
nmulthits++;
+ }
}
// Flag any anomalous cases that we find
- if (nmulthits > 1)
+ if (nmulthits > 1) {
System.out.println("2 tracks associated with a single MC Particle");
+ }
}
// if (nhits == nlayers[0]) {
@@ -1052,8 +1115,9 @@
_nchMCP++;
findableTracks++;
double wgt = 0.;
- if (ntrk > 0)
+ if (ntrk > 0) {
wgt = 1.;
+ }
foundTracks += wgt;
peffFindable.fill(p, wgt);
phieffFindable.fill(phi, wgt);
@@ -1083,8 +1147,9 @@
if (isFindable) {
findableelectrons++;
double wgt = 0.;
- if (ntrk > 0)
+ if (ntrk > 0) {
wgt = 1.;
+ }
foundelectrons += wgt;
peffElectrons.fill(p, wgt);
phieffElectrons.fill(phi, wgt);
@@ -1111,19 +1176,24 @@
}
- if (mcp.getGeneratorStatus() == mcp.FINAL_STATE && mcp.getCharge() != 0)
- if (Math.abs(eta) < 6)
+ if (mcp.getGeneratorStatus() == mcp.FINAL_STATE && mcp.getCharge() != 0) {
+ if (Math.abs(eta) < 6) {
aida.cloud1D("findable/eta for final state particles").fill(eta);
- if (mcp.getGeneratorStatus() != mcp.FINAL_STATE && mcp.getGeneratorStatus() != mcp.INTERMEDIATE)
- if (Math.abs(eta) < 6)
+ }
+ }
+ if (mcp.getGeneratorStatus() != mcp.FINAL_STATE && mcp.getGeneratorStatus() != mcp.INTERMEDIATE) {
+ if (Math.abs(eta) < 6) {
aida.cloud1D("findable/eta for other particles").fill(eta);
+ }
+ }
// Select mcp that fail the final state requirement
if (mcp.getGeneratorStatus() != mcp.FINAL_STATE) {
aida.cloud1D("findable/Hits for non-final state particles").fill(nhits);
aida.cloud1D("findable/pT for non-final state particles").fill(pt);
aida.cloud1D("findable/cos(theta) for non-final state particles").fill(cth);
- if (Math.abs(eta) < 6)
+ if (Math.abs(eta) < 6) {
aida.cloud1D("findable/eta for non-final state particles").fill(eta);
+ }
aida.cloud1D("findable/d0 for non-final state particles").fill(d0);
aida.cloud1D("findable/z0 for non-final state particles").fill(z0);
aida.cloud2D("findable/Hits vs eta for non-final state particles").fill(eta, nhits);
@@ -1144,12 +1214,14 @@
aida.cloud1D("findable/Hits for base MC selection").fill(nhits);
aida.cloud1D("findable/pT for base MC selection").fill(pt);
aida.cloud1D("findable/cos(theta) for base MC selection").fill(cth);
- if (Math.abs(eta) < 6)
+ if (Math.abs(eta) < 6) {
aida.cloud1D("findable/eta for base MC selection").fill(eta);
+ }
aida.cloud1D("findable/d0 for base MC selection").fill(d0);
aida.cloud1D("findable/z0 for base MC selection").fill(z0);
- if (Math.abs(eta) < 6)
+ if (Math.abs(eta) < 6) {
aida.cloud2D("findable/Hits vs eta for base MC selection").fill(eta, nhits);
+ }
}
@@ -1210,8 +1282,9 @@
private double getphi(double x, double y) {
double phi = Math.atan2(y, x);
- if (phi < 0.)
+ if (phi < 0.) {
phi += 2. * Math.PI;
+ }
return phi;
}
@@ -1328,8 +1401,9 @@
double dzdx1 = slt1.dzdx();
double s1sq = 1 + 1 / (dydx1 * dydx1) + (dzdx1 * dzdx1) / (dydx1 * dydx1);
double truep1y = Math.sqrt(p1mag2 / s1sq);
- if (dydx1 < 0)
+ if (dydx1 < 0) {
truep1y = -truep1y;
+ }
double truep1x = truep1y / dydx1;
double truep1z = dzdx1 * truep1x;
@@ -1343,8 +1417,9 @@
double dzdx2 = slt2.dzdx();
double s2sq = 1 + 1 / (dydx2 * dydx2) + (dzdx2 * dzdx2) / (dydx2 * dydx2);
double truep2y = Math.sqrt(p2mag2 / s2sq);
- if (dydx2 < 0)
+ if (dydx2 < 0) {
truep2y = -truep2y;
+ }
double truep2x = truep2y / dydx2;
double truep2z = dzdx2 * truep2x;
@@ -1431,8 +1506,9 @@
double dzdx1 = slt1.dzdx();
double s1sq = 1 + 1 / (dydx1 * dydx1) + (dzdx1 * dzdx1) / (dydx1 * dydx1);
truep[1] = Math.sqrt(p1mag2 / s1sq);
- if (dydx1 < 0)
+ if (dydx1 < 0) {
truep[1] = -truep[1];
+ }
truep[0] = truep[1] / dydx1;
truep[2] = dzdx1 * truep[0];
return new BasicHep3Vector(truep[0], truep[1], truep[2]);
@@ -1457,7 +1533,7 @@
double mindist = 99999999;
for (HelicalTrackHit hth : toththits) {
HelicalTrackCross cross = (HelicalTrackCross) hth;
- for (HelicalTrackStrip str : cross.getStrips())
+ for (HelicalTrackStrip str : cross.getStrips()) {
if (str != cl) {
Hep3Vector strorigin = str.origin();
Hep3Vector stru = str.u();
@@ -1470,6 +1546,7 @@
nearest = str;
}
}
+ }
}
return nearest;
@@ -1486,7 +1563,7 @@
Double mindist = 99999999.0;
for (HelicalTrackHit hth : toththits) {
HelicalTrackCross cross = (HelicalTrackCross) hth;
- for (HelicalTrackStrip str : cross.getStrips())
+ for (HelicalTrackStrip str : cross.getStrips()) {
if (str != cl) {
Hep3Vector strorigin = str.origin();
Hep3Vector stru = str.u();
@@ -1496,19 +1573,22 @@
int strlayer = str.layer();
if (layer == strlayer && VecOp.sub(clvec, strvec).magnitude() < Math.abs(mindist)) {
mindist = VecOp.sub(clvec, strvec).magnitude();
- if (Math.abs(clvec.z()) > Math.abs(strvec.z()))
+ if (Math.abs(clvec.z()) > Math.abs(strvec.z())) {
mindist = -mindist;
+ }
nearest = str;
}
}
+ }
}
return mindist;
}
private Integer encodeBadHitList(List<Integer> badHits) {
Integer badHitsEncoded = 0;
- for (Integer layer : badHits)
+ for (Integer layer : badHits) {
badHitsEncoded += (int) Math.pow(2, layer - 1);
+ }
return badHitsEncoded;
}
}
hps-java/src/main/java/org/lcsim/hps/users/mgraham
diff -u -r1.6 -r1.7
--- MainJASDriver.java 9 Apr 2013 22:03:05 -0000 1.6
+++ MainJASDriver.java 11 Apr 2013 19:16:05 -0000 1.7
@@ -1,9 +1,8 @@
package org.lcsim.hps.users.mgraham;
-import org.lcsim.hps.recon.tracking.HelicalTrackHitDriver;
-import org.lcsim.hps.recon.tracking.HPSSVTSensorSetup;
-import org.lcsim.hps.recon.tracking.TrackerDigiDriver;
-import org.lcsim.hps.recon.tracking.TrackerReconDriver;
+import org.lcsim.hps.monitoring.CalibrationDriver;
+import org.lcsim.hps.recon.tracking.*;
+import org.lcsim.recon.tracking.digitization.sisim.config.RawTrackerHitSensorSetup;
import org.lcsim.util.Driver;
/**
@@ -16,23 +15,35 @@
public MainJASDriver() {
- add(new HPSSVTSensorSetup());
- add(new TrackerDigiDriver());
-// add(new TrackerReconDriver());
-// HelicalTrackHitDriver hth = new HelicalTrackHitDriver();
+// add(new HPSSVTSensorSetup());
+ add(new CalibrationDriver());
+ add(new RawTrackerHitSensorSetup());
+ // Can remove HPSRawTrackerHitFitterDriver and DataTrackerHitDriver for integrated MC
+ HPSRawTrackerHitFitterDriver hitfitter=new HPSRawTrackerHitFitterDriver();
+ hitfitter.setCorrectT0Shift(true);
+ hitfitter.setFitAlgorithm("Analytic");
+ add(hitfitter);
+ add(new DataTrackerHitDriver());
- SingleSensorHelicalTrackHitDriver hth = new SingleSensorHelicalTrackHitDriver();
+// add(new TrackerDigiDriver()); //add for integrated MC
+ HelicalTrackHitDriver hth = new HelicalTrackHitDriver();
+
+// SingleSensorHelicalTrackHitDriver hth = new SingleSensorHelicalTrackHitDriver();
hth.setMaxSeperation(20.0);
hth.setTolerance(1.0);
add(hth);
TrackerReconDriver trd=new TrackerReconDriver();
- trd.setStrategyResource("/org/lcsim/hps/recon/tracking/strategies/HPS-SingleSensors.xml");
-// trd.setStrategyResource("/org/lcsim/hps/recon/tracking/strategies/HPS-Full.xml");
+// trd.setStrategyResource("/org/lcsim/hps/recon/tracking/strategies/HPS-SingleSensors.xml");
+ trd.setStrategyResource("/org/lcsim/hps/recon/tracking/strategies/HPS-Full.xml");
// trd.setStrategyResource("/org/lcsim/hps/recon/tracking/strategies/HPS-Test-Lyr50.xml");
trd.setDebug(true);
add(trd);
- add(new DetailedAnalysisDriver(10));
+//
+ DetailedAnalysisDriver dad=new DetailedAnalysisDriver(12);
+ dad.setRawHitsName("SVTRawTrackerHits");
+ add(dad);
+
// add(new FastTrackAnalysisDriver());
hps-java/src/main/resources/org/lcsim/hps/steering/users/mgraham
diff -N HitTimeStudies.lcsim
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ HitTimeStudies.lcsim 11 Apr 2013 19:16:05 -0000 1.1
@@ -0,0 +1,65 @@
+<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
+ <execute>
+ <driver name="EventMarkerDriver"/>
+ <driver name="CalibrationDriver"/>
+ <driver name="RawTrackerHitSensorSetup"/>
+ <driver name="RawTrackerHitFitterDriver" />
+ <driver name="EcalRawConverter" />
+ <driver name="EcalClusterer" />
+ <driver name="TrackerHitDriver"/>
+ <driver name="HelicalTrackHitDriver"/>
+ <driver name="TrackerReconDriver"/>
+<!-- <driver name="ReconParticle" /> -->
+<!-- <driver name="LCIOWriter"/> -->
+ <driver name="HitTimeDriver" />
+ <driver name="CleanupDriver"/>
+ </execute>
+ <drivers>
+ <driver name="CalibrationDriver" type="org.lcsim.hps.monitoring.CalibrationDriver">
+<!-- <runNumber>${runNumber}</runNumber>-->
+ </driver>
+ <driver name="EventMarkerDriver"
+ type="org.lcsim.job.EventMarkerDriver">
+ <eventInterval>1</eventInterval>
+ </driver>
+ <driver name="RawTrackerHitSensorSetup" type="org.lcsim.recon.tracking.digitization.sisim.config.RawTrackerHitSensorSetup"/>
+ <driver name="RawTrackerHitFitterDriver" type="org.lcsim.hps.recon.tracking.HPSRawTrackerHitFitterDriver">
+ <fitAlgorithm>Analytic</fitAlgorithm>
+ <correctT0Shift>false</correctT0Shift>
+ </driver>
+ <driver name="TrackerHitDriver" type="org.lcsim.hps.users.mgraham.DataTrackerHitDriver" />
+ <driver name="HitTimeDriver" type="org.lcsim.hps.users.mgraham.HitTimePlotter" />
+<!-- <driver name="HitTimeDriver" type="org.lcsim.hps.users.meeg.HitTimePrintDriver" /> -->
+ <driver name="HelicalTrackHitDriver"
+ type="org.lcsim.hps.recon.tracking.HelicalTrackHitDriver">
+ <debug>false</debug>
+ <clusterTimeCut>4.0</clusterTimeCut>
+ <layerGeometryType>Common</layerGeometryType>
+ <maxSeperation>20.0</maxSeperation>
+ <tolerance>1.0</tolerance>
+ </driver>
+ <driver name="TrackerReconDriver"
+ type="org.lcsim.hps.recon.tracking.TrackerReconDriver">
+ <debug>true</debug>
+ </driver>
+ <driver name="EcalRawConverter" type="org.lcsim.hps.recon.ecal.EcalRawConverterDriver">
+ <ecalCollectionName>EcalCalHits</ecalCollectionName>
+ </driver>
+ <driver name="EcalClusterer" type="org.lcsim.hps.recon.ecal.EcalClusterer">
+ <ecalName>Ecal</ecalName>
+ <ecalCollectionName>EcalCalHits</ecalCollectionName>
+ </driver>
+
+ <driver name="ReconParticle" type="org.lcsim.hps.recon.particle.ReconParticleDriver">
+ </driver>
+<!--
+ <driver name="LCIOWriter"
+ type="org.lcsim.util.loop.LCIODriver">
+ <outputFilePath>${outputFile}.slcio</outputFilePath>
+ </driver> -->
+ <driver name="CleanupDriver" type="org.lcsim.recon.tracking.digitization.sisim.config.ReadoutCleanupDriver">
+ <collectionNames>TrackerHits</collectionNames>
+ </driver>
+ </drivers>
+</lcsim>
hps-java/src/main/java/org/lcsim/hps/recon/tracking
diff -u -r1.16 -r1.17
--- HPSRawTrackerHitFitterDriver.java 15 Sep 2012 01:21:02 -0000 1.16
+++ HPSRawTrackerHitFitterDriver.java 11 Apr 2013 19:16:05 -0000 1.17
@@ -5,6 +5,7 @@
import org.lcsim.detector.tracker.silicon.SiSensor;
import org.lcsim.event.EventHeader;
import org.lcsim.event.RawTrackerHit;
+import org.lcsim.hps.readout.ecal.ReadoutTimestamp;
import org.lcsim.hps.recon.tracking.HPSSVTCalibrationConstants.ChannelConstants;
import org.lcsim.util.Driver;
import org.lcsim.util.lcio.LCIOConstants;
@@ -79,7 +80,12 @@
ChannelConstants constants = HPSSVTCalibrationConstants.getChannelConstants((SiSensor) hit.getDetectorElement(), strip);
HPSShapeFitParameters fit = _shaper.fitShape(hit, constants);
if (correctT0Shift) {
- fit.setT0(fit.getT0() - constants.getT0Shift());
+ double t0Svt = ReadoutTimestamp.getTimestamp(ReadoutTimestamp.SYSTEM_TRACKER, event);
+ double t0Trig = ReadoutTimestamp.getTimestamp(ReadoutTimestamp.SYSTEM_TRIGGER, event);
+ double corMod = (t0Svt - t0Trig) - constants.getT0Shift();
+ fit.setT0(fit.getT0() + corMod);
+// fit.setT0(fit.getT0() - constants.getT0Shift());
+
}
if (debug) {
System.out.println(fit);
hps-java/src/main/java/org/lcsim/hps/recon/tracking
diff -u -r1.23 -r1.24
--- HPSSVTCalibrationConstants.java 25 Feb 2013 22:39:26 -0000 1.23
+++ HPSSVTCalibrationConstants.java 11 Apr 2013 19:16:05 -0000 1.24
@@ -13,19 +13,55 @@
/**
*
- * @author Mathew Graham <[log in to unmask]>
- * $Id: HPSSVTCalibrationConstants.java,v 1.23 2013/02/25 22:39:26 meeg Exp $
+ * @author Mathew Graham <[log in to unmask]> $Id:
+ * HPSSVTCalibrationConstants.java,v 1.23 2013/02/25 22:39:26 meeg Exp $
*/
public class HPSSVTCalibrationConstants {
// TODO: Change all map keys to type SiSensor?
// TODO: Update everything to make it compatible new version of SVT Utils
- private static Map<Pair<Integer /* FPGA */, Integer /* Hybrid */>, double[] /* constants */> noiseMap = new HashMap<Pair<Integer, Integer>, double[]>();
- private static Map<Pair<Integer /* FPGA */, Integer /* Hybrid */>, double[] /* constants */> pedestalMap = new HashMap<Pair<Integer, Integer>, double[]>();
- private static Map<Pair<Integer /* FPGA */, Integer /* Hybrid */>, double[] /* constants */> tpMap = new HashMap<Pair<Integer, Integer>, double[]>();
- private static Map<Pair<Integer /* FPGA */, Integer /* Hybrid */>, Set<Integer> /* Bad channels */> badChannelMap = new HashMap<Pair<Integer, Integer>, Set<Integer>>();
- private static Map<Pair<Integer /* FPGA */, Integer /* Hybrid */>, List<Double> /* channels */> gainMap = new HashMap<Pair<Integer, Integer>, List<Double>>();
- private static Map<Pair<Integer /* FPGA */, Integer /* Hybrid */>, List<Double> /* channels */> offsetMap = new HashMap<Pair<Integer, Integer>, List<Double>>();
+ private static Map<Pair<Integer /*
+ * FPGA
+ */, Integer /*
+ * Hybrid
+ */>, double[] /*
+ * constants
+ */> noiseMap = new HashMap<Pair<Integer, Integer>, double[]>();
+ private static Map<Pair<Integer /*
+ * FPGA
+ */, Integer /*
+ * Hybrid
+ */>, double[] /*
+ * constants
+ */> pedestalMap = new HashMap<Pair<Integer, Integer>, double[]>();
+ private static Map<Pair<Integer /*
+ * FPGA
+ */, Integer /*
+ * Hybrid
+ */>, double[] /*
+ * constants
+ */> tpMap = new HashMap<Pair<Integer, Integer>, double[]>();
+ private static Map<Pair<Integer /*
+ * FPGA
+ */, Integer /*
+ * Hybrid
+ */>, Set<Integer> /*
+ * Bad channels
+ */> badChannelMap = new HashMap<Pair<Integer, Integer>, Set<Integer>>();
+ private static Map<Pair<Integer /*
+ * FPGA
+ */, Integer /*
+ * Hybrid
+ */>, List<Double> /*
+ * channels
+ */> gainMap = new HashMap<Pair<Integer, Integer>, List<Double>>();
+ private static Map<Pair<Integer /*
+ * FPGA
+ */, Integer /*
+ * Hybrid
+ */>, List<Double> /*
+ * channels
+ */> offsetMap = new HashMap<Pair<Integer, Integer>, List<Double>>();
private static boolean pedestalLoaded = false;
private static boolean tpLoaded = false;
private static int totalBadChannels = 0;
@@ -180,10 +216,10 @@
}
/**
- * Load the bad channels for the specified run. If there are no
- * bad channels specified, just load those found from QA. Channels
- * found to be bad from QA will always be loaded.
- *
+ * Load the bad channels for the specified run. If there are no bad channels
+ * specified, just load those found from QA. Channels found to be bad from
+ * QA will always be loaded.
+ *
* @param run number
*/
public static void loadBadChannels(int runNumber) {
@@ -191,7 +227,7 @@
// Clear the previously loaded bad channels
badChannelMap.clear();
System.out.println("Loading the SVT bad channels for run " + runNumber);
-
+
// If the calibrations are ideal (run < 0) don't load any bad channels
if (runNumber < 0) {
System.out.println("Running using ideal SVT calibrations. Bad channels will not be loaded.");
@@ -209,7 +245,7 @@
} catch (IOException exception) {
throw new RuntimeException("Unable to load bad channels for list " + filePath, exception);
}
-
+
// Load the bad channels for the specified run number
filePath = "daqmap/svt" + runNumber + ".badchannels";
try {
@@ -223,7 +259,7 @@
/**
* Load the bad channels from a file using the specified character stream.
- *
+ *
* @param reader : character stream of type Reader
*/
private static void loadBadChannels(Reader reader) {
@@ -376,76 +412,7 @@
IIdentifier id = sensor.getIdentifier();
int layer = helper.getValue(id, "layer"); // 1-10; axial layers are odd layers; stereo layers are even
int module = helper.getValue(id, "module"); // 0-1; module number is top or bottom
- switch (module) {
- case 0:
- switch (layer) {
- case 1:
- value = 1.5;
- break;
- case 2:
- value = 1.6;
- break;
- case 3:
- value = -2.8;
- break;
- case 4:
- value = 2.0;
- break;
- case 5:
- value = -1.9;
- break;
- case 6:
- value = -2.2;
- break;
- case 7:
- value = 1.8;
- break;
- case 8:
- value = 1.2;
- break;
- case 9:
- value = 2.5;
- break;
- case 10:
- value = 0.0;
- break;
- }
- break;
- case 1:
- switch (layer) {
- case 1:
- value = 1.0;
- break;
- case 2:
- value = 1.3;
- break;
- case 3:
- value = -3.0;
- break;
- case 4:
- value = 3.5;
- break;
- case 5:
- value = 0.0;
- break;
- case 6:
- value = -0.5;
- break;
- case 7:
- value = -0.8;
- break;
- case 8:
- value = -1.1;
- break;
- case 9:
- value = 3.5;
- break;
- case 10:
- value = -2.7;
- break;
- }
- break;
- }
+ value = lookupT0Shift(layer, module);
constants.setT0Shift(value);
return constants;
@@ -453,9 +420,9 @@
/**
* Checks if a channel has been tagged as bad
- *
- * @param daqPair : a FPGA/Hybrid pair defining which sensor the
- * channels in located on
+ *
+ * @param daqPair : a FPGA/Hybrid pair defining which sensor the channels in
+ * located on
* @param channel : The channel to be checked
* @return true if the channel is bad, false otherwise
*/
@@ -521,4 +488,205 @@
this.t0Shift = t0Shift;
}
}
+
+ static private double lookupT0Shift(int layer, int module) {
+ double value = -999;
+// switch (module) {
+// case 0:
+// switch (layer) {
+// case 1:
+// value = 1.5;
+// break;
+// case 2:
+// value = 1.6;
+// break;
+// case 3:
+// value = -2.8;
+// break;
+// case 4:
+// value = 2.0;
+// break;
+// case 5:
+// value = -1.9;
+// break;
+// case 6:
+// value = -2.2;
+// break;
+// case 7:
+// value = 1.8;
+// break;
+// case 8:
+// value = 1.2;
+// break;
+// case 9:
+// value = 2.5;
+// break;
+// case 10:
+// value = 0.0;
+// break;
+// }
+// break;
+// case 1:
+// switch (layer) {
+// case 1:
+// value = 1.0;
+// break;
+// case 2:
+// value = 1.3;
+// break;
+// case 3:
+// value = -3.0;
+// break;
+// case 4:
+// value = 3.5;
+// break;
+// case 5:
+// value = 0.0;
+// break;
+// case 6:
+// value = -0.5;
+// break;
+// case 7:
+// value = -0.8;
+// break;
+// case 8:
+// value = -1.1;
+// break;
+// case 9:
+// value = 3.5;
+// break;
+// case 10:
+// value = -2.7;
+// break;
+// }
+// break;
+// }
+ switch (module) {
+ case 0:
+ switch (layer) {
+ case 1:
+ value = -186.1;
+ break;
+ case 2:
+ value = -186.1;
+ break;
+ case 3:
+ value = -185.8;
+ break;
+ case 4:
+ value = -185.9;
+ break;
+ case 5:
+ value = -185.8;
+ break;
+ case 6:
+ value = -185.8;
+ break;
+ case 7:
+ value = -185.8;
+ break;
+ case 8:
+ value = -185.9;
+ break;
+ case 9:
+ value = -185.8;
+ break;
+ case 10:
+ value = -185.8;
+ break;
+ case 11:
+ value = -185.6;
+ break;
+ case 12:
+ value = -186.0;
+ break;
+ }
+ break;
+ case 1:
+ switch (layer) {
+ case 1:
+ value = -185.6;
+ break;
+ case 2:
+ value = -185.3;
+ break;
+ case 3:
+ value = -185.9;
+ break;
+ case 4:
+ value = -185.7;
+ break;
+ case 5:
+ value = -185.6;
+ break;
+ case 6:
+ value = -185.9;
+ break;
+ case 7:
+ value = -185.8;
+ break;
+ case 8:
+ value = -186.1;
+ break;
+ case 9:
+ value = -186.0;
+ break;
+ case 10:
+ value = -185.9;
+ break;
+ case 11:
+ value = -185.9;
+ break;
+ case 12:
+ value = -186.1;
+ break;
+ }
+ break;
+ case 2:
+ switch (layer) {
+ case 7:
+ value = -185.7;
+ break;
+ case 8:
+ value = -185.7;
+ break;
+ case 9:
+ value = -185.9;
+ break;
+ case 10:
+ value = -186.0;
+ break;
+ case 11:
+ value = -185.8;
+ break;
+ case 12:
+ value = -185.9;
+ break;
+ }
+ break;
+ case 3:
+ switch (layer) {
+ case 7:
+ value = -185.5;
+ break;
+ case 8:
+ value = -185.6;
+ break;
+ case 9:
+ value = -185.5;
+ break;
+ case 10:
+ value = -185.5;
+ break;
+ case 11:
+ value = -186.6;
+ break;
+ case 12:
+ value = -186.7;
+ break;
+ }
+ break;
+ }
+ return value;
+ }
}
hps-java/src/main/java/org/lcsim/hps/recon/tracking
diff -u -r1.1 -r1.2
--- HelicalTrackHitDriver.java 26 Nov 2012 18:12:01 -0000 1.1
+++ HelicalTrackHitDriver.java 11 Apr 2013 19:16:06 -0000 1.2
@@ -34,16 +34,17 @@
*/
public class HelicalTrackHitDriver extends org.lcsim.fit.helicaltrack.HelicalTrackHitDriver {
private boolean _debug = false;
+ private double _clusterTimeCut = -99; // if negative, don't cut..otherwise, dt cut time in ns
private String subdetectorName = "Tracker";
- private Map<String,String> _stereomap = new HashMap<String,String>();
+ private Map<String, String> _stereomap = new HashMap<String, String>();
private List<String> _colnames = new ArrayList<String>();
private boolean _doTransformToTracking = true;
private HPSTransformations _detToTrk = new HPSTransformations();
- public enum LayerGeometryType {
+ public enum LayerGeometryType {
/*
* Each Layer in the geometry is a separate sensor
*/
- Split,
+ Split,
/*
* Each layer in the geometry comprises top and bottom sensor
*/
@@ -58,19 +59,23 @@
public void setLayerGeometryType(String geomType) {
this._layerGeometryType = LayerGeometryType.valueOf(geomType);
}
-
+
+ public void setClusterTimeCut(double dtCut) {
+ this._clusterTimeCut = dtCut;
+ }
+
public void setSubdetectorName(String subdetectorName) {
this.subdetectorName = subdetectorName;
}
-
+
public void setDebug(boolean debug) {
this._debug = debug;
}
-
+
public void setTransformToTracking(boolean trans) {
this._doTransformToTracking = trans;
}
-
+
public void setStripHitsCollectionName(String stripHitsCollectionName) {
HitRelationName(stripHitsCollectionName);
}
@@ -86,8 +91,7 @@
public void setOutputHitCollectionName(String outputHitCollectionName) {
OutputCollection(outputHitCollectionName);
}
-
-
+
@Override
public void process(EventHeader event) {
//super.process(event);
@@ -95,42 +99,44 @@
// Initialize the list of HelicalTrackHits
List<HelicalTrackCross> stereoCrosses = new ArrayList<HelicalTrackCross>();
List<HelicalTrackHit> helhits = new ArrayList<HelicalTrackHit>();
-
+
// Create a List of LCRelations to relate HelicalTrackHits to the original hits
List<LCRelation> hitrelations = new ArrayList<LCRelation>();
// Create a List of LCRelations to relate HelicalTrackHits to the MC particle
List<LCRelation> mcrelations = new ArrayList<LCRelation>();
-
-
- for(String _colname : this._colnames) {
-
+
+
+ for (String _colname : this._colnames) {
+
if (!event.hasCollection(SiTrackerHit.class, _colname)) {
continue;
}
// Get the list of SiTrackerHits for this collection
List<SiTrackerHit> hitlist = (List<SiTrackerHit>) event.get(_colname);
- if (_debug) System.out.printf("%s: found %d SiTrackerHits = ",this.getClass().getSimpleName(),hitlist.size());
-
+ if (_debug) {
+ System.out.printf("%s: found %d SiTrackerHits = ", this.getClass().getSimpleName(), hitlist.size());
+ }
+
// Create collections for strip hits by layer and hit cross references
Map<String, List<HelicalTrackStrip>> striplistmap = new HashMap<String, List<HelicalTrackStrip>>();
Map<HelicalTrackStrip, SiTrackerHitStrip1D> stripmap = new HashMap<HelicalTrackStrip, SiTrackerHitStrip1D>();
-
- for(SiTrackerHit hit : hitlist) {
-
- if( hit instanceof SiTrackerHitStrip1D) {
-
+
+ for (SiTrackerHit hit : hitlist) {
+
+ if (hit instanceof SiTrackerHitStrip1D) {
+
// Cast the hit as a 1D strip hit and find the identifier for the detector/layer combo
SiTrackerHitStrip1D h = (SiTrackerHitStrip1D) hit;
IDetectorElement de = h.getSensor();
String id = this.makeID(_ID.getName(de), _ID.getLayer(de));
// This hit should be a on a stereo pair!
- if (!_stereomap.containsKey(id) &&! _stereomap.containsValue(id)) {
+ if (!_stereomap.containsKey(id) && !_stereomap.containsValue(id)) {
throw new RuntimeException(this.getClass().getSimpleName() + ": this " + id + " was not among the stereo modules!");
}
-
+
// Create a HelicalTrackStrip for this hit
HelicalTrackStrip strip = makeDigiStrip(h);
@@ -140,15 +146,17 @@
lyrhits = new ArrayList<HelicalTrackStrip>();
striplistmap.put(id, lyrhits);
}
+ if ((_clusterTimeCut > 0 && Math.abs(h.getTime()) < _clusterTimeCut)||_clusterTimeCut<0) {
+ // Add the strip to the list of strips on this sensor
+ lyrhits.add(strip);
- // Add the strip to the list of strips on this sensor
- lyrhits.add(strip);
+ // Map a reference back to the hit needed to create the stereo hit LC relations
+ stripmap.put(strip, h);
- // Map a reference back to the hit needed to create the stereo hit LC relations
- stripmap.put(strip, h);
-
- if(_debug) System.out.printf("%s: added strip (org=%s,umeas=%.3f) at layer %d ",this.getClass().getSimpleName(),strip.origin().toString(),strip.umeas(),strip.layer());
-
+ if (_debug) {
+ System.out.printf("%s: added strip (org=%s,umeas=%.3f) at layer %d with time %.3f\n", this.getClass().getSimpleName(), strip.origin().toString(), strip.umeas(), strip.layer(),strip.time());
+ }
+ }
} else {
// If not a 1D strip hit, make a pixel hit
@@ -156,15 +164,17 @@
helhits.add(hit3d);
hitrelations.add(new MyLCRelation(hit3d, hit));
}
-
+
} // Loop over SiTrackerHits
-
-
+
+
// Create a list of stereo hits
//List<HelicalTrackCross> stereohits = new ArrayList<HelicalTrackCross>();
-
- if (_debug) System.out.println(this.getClass().getSimpleName() + ": Create stereo hits from " + striplistmap.size() + " strips (map size)");
-
+
+ if (_debug) {
+ System.out.println(this.getClass().getSimpleName() + ": Create stereo hits from " + striplistmap.size() + " strips (map size)");
+ }
+
// Loop over the stereo layer pairs
for (String id1 : _stereomap.keySet()) {
@@ -178,132 +188,148 @@
//for(HelicalTrackStrip strip: striplistmap.get(id2)) System.out.printf("%s: stripid2 at origin %s\n",this.getClass().getSimpleName(),strip.origin().toString());
}
}
-
+
/*
- * Form the stereo hits and add them to our hit list
- * Add LC relations for stereo hit to SiTrackHitStrip1D object
- * Add LC relation between MC particle and stereo hit
+ * Form the stereo hits and add them to our hit list Add LC
+ * relations for stereo hit to SiTrackHitStrip1D object Add LC
+ * relation between MC particle and stereo hit
*/
-
- List<HelicalTrackCross> cross_list = _crosser.MakeHits(striplistmap.get(id1), striplistmap.get(id2));
-
- for(HelicalTrackCross cross : cross_list) {
+
+ List<HelicalTrackCross> cross_list = _crosser.MakeHits(striplistmap.get(id1), striplistmap.get(id2));
+
+ for (HelicalTrackCross cross : cross_list) {
stereoCrosses.add(cross);
- if(cross.getMCParticles()!=null) {
- for(MCParticle mcp : cross.getMCParticles()) {
- mcrelations.add(new MyLCRelation((HelicalTrackHit)cross,mcp));
+ if (cross.getMCParticles() != null) {
+ for (MCParticle mcp : cross.getMCParticles()) {
+ mcrelations.add(new MyLCRelation((HelicalTrackHit) cross, mcp));
}
}
- for(HelicalTrackStrip strip : cross.getStrips()) {
- hitrelations.add(new MyLCRelation(cross,stripmap.get(strip)));
+ for (HelicalTrackStrip strip : cross.getStrips()) {
+ hitrelations.add(new MyLCRelation(cross, stripmap.get(strip)));
}
-
+
}
-
+
} // Loop over stereo pairs
if (_debug) {
- System.out.printf("%s: added %d stereo hits from %s collection ",this.getClass().getSimpleName(),stereoCrosses.size(),_colname);
+ System.out.printf("%s: added %d stereo hits from %s collection ", this.getClass().getSimpleName(), stereoCrosses.size(), _colname);
}
-
-
+
+
} // Loop over collection names
-
-
-
+
+
+
// Add things to the event
// Cast crosses to HTH
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(_doTransformToTracking) addRotatedHitsToEvent(event, stereoCrosses);
-
-
-
+ event.put(_hitrelname, hitrelations, LCRelation.class, 0);
+ event.put(_mcrelname, mcrelations, LCRelation.class, 0);
+ if (_doTransformToTracking) {
+ addRotatedHitsToEvent(event, stereoCrosses);
+ }
+
+
+
} //Process()
-
public void addCollection(String colname) {
_colnames.add(colname);
}
+
public void setCollection(String colname) {
_colnames.clear();
this.addCollection(colname);
}
+
private String makeID(String detname, int lyr) {
return detname + lyr;
}
-
+
public void setStereoPair(String detname, int lyr1, int lyr2) {
this._stereomap.put(this.makeID(detname, lyr1), this.makeID(detname, lyr2));
}
-
+
@Override
protected void detectorChanged(Detector detector) {
/*
* Setup default pairing
*/
- if (_debug) System.out.printf("%s: Setup stereo hit pair modules ",this.getClass().getSimpleName());
-
+ if (_debug) {
+ System.out.printf("%s: Setup stereo hit pair modules ", this.getClass().getSimpleName());
+ }
+
List<SiTrackerModule> modules = detector.getSubdetector(this.subdetectorName).getDetectorElement().findDescendants(SiTrackerModule.class);
if (modules.isEmpty()) {
throw new RuntimeException(this.getClass().getName() + ": No SiTrackerModules found in detector.");
}
int nLayersTotal = detector.getSubdetector(subdetectorName).getLayering().getLayers().getNumberOfLayers();
- if (_debug) System.out.printf("%s: %d layers ",this.getClass().getSimpleName(),nLayersTotal);
+ if (_debug) {
+ System.out.printf("%s: %d layers ", this.getClass().getSimpleName(), nLayersTotal);
+ }
if (nLayersTotal % 2 != 0) {
throw new RuntimeException(this.getClass().getName() + ": Don't know how to do stereo pairing for odd number of modules.");
}
- if(this._layerGeometryType==LayerGeometryType.Split) {
- int nLayers = nLayersTotal/2;
- for(int i=1;i<=nLayers;++i) {
+ if (this._layerGeometryType == LayerGeometryType.Split) {
+ int nLayers = nLayersTotal / 2;
+ for (int i = 1; i <= nLayers; ++i) {
int ly1 = i;
- int ly2 = i+10;
- if (_debug) System.out.printf("%s: adding stereo pair from layer %d and %d ",this.getClass().getSimpleName(),ly1,ly2);
+ int ly2 = i + 10;
+ if (_debug) {
+ System.out.printf("%s: adding stereo pair from layer %d and %d ", this.getClass().getSimpleName(), ly1, ly2);
+ }
this.setStereoPair(subdetectorName, ly1, ly2);
- }
- } else if(this._layerGeometryType==LayerGeometryType.Common) {
+ }
+ } else if (this._layerGeometryType == LayerGeometryType.Common) {
List<int[]> pairs = new ArrayList<int[]>();
for (int i = 1; i <= (nLayersTotal) - 1; i += 2) {
int[] pair = {i, i + 1};
- if (_debug)
+ if (_debug) {
System.out.println("Adding stereo pair: " + pair[0] + ", " + pair[1]);
+ }
pairs.add(pair);
}
for (int[] pair : pairs) {
- if (_debug) System.out.printf("%s: adding stereo pair from layer %d and %d ",this.getClass().getSimpleName(),pair[0],pair[1]);
+ if (_debug) {
+ System.out.printf("%s: adding stereo pair from layer %d and %d ", this.getClass().getSimpleName(), pair[0], pair[1]);
+ }
setStereoPair(subdetectorName, pair[0], pair[1]);
}
} else {
throw new RuntimeException(this.getClass().getSimpleName() + ": this layer geometry is not implemented!");
}
- if (_debug) System.out.printf("%s: %d stereo modules added",this.getClass().getSimpleName(),this._stereomap.size());
-
+ if (_debug) {
+ System.out.printf("%s: %d stereo modules added", this.getClass().getSimpleName(), this._stereomap.size());
+ }
+
}
-
- private HelicalTrackStrip makeDigiStrip(SiTrackerHitStrip1D h) {
-
- if(_debug) System.out.println(this.getClass().getSimpleName() + ": makeDigiStrip--");
-
+
+ private HelicalTrackStrip makeDigiStrip(SiTrackerHitStrip1D h) {
+
+ if (_debug) {
+ System.out.println(this.getClass().getSimpleName() + ": makeDigiStrip--");
+ }
+
SiTrackerHitStrip1D local = h.getTransformedHit(TrackerHitType.CoordinateSystem.SENSOR);
SiTrackerHitStrip1D global = h.getTransformedHit(TrackerHitType.CoordinateSystem.GLOBAL);
-
+
ITransform3D trans = local.getLocalToGlobal();
Hep3Vector org = trans.transformed(_orgloc);
Hep3Vector u = global.getMeasuredCoordinate();
Hep3Vector v = global.getUnmeasuredCoordinate();
-
-
-
+
+
+
double umeas = local.getPosition()[0];
double vmin = VecOp.dot(local.getUnmeasuredCoordinate(), local.getHitSegment().getStartPoint());
double vmax = VecOp.dot(local.getUnmeasuredCoordinate(), local.getHitSegment().getEndPoint());
double du = Math.sqrt(local.getCovarianceAsMatrix().diagonal(0));
-
-
+
+
IDetectorElement de = h.getSensor();
String det = _ID.getName(de);
int lyr = _ID.getLayer(de);
@@ -324,15 +350,15 @@
} catch (RuntimeException e) {
// Okay when MC info not present.
}
-
- if(_debug) {
+
+ if (_debug) {
System.out.println(this.getClass().getSimpleName() + ": produced HelicalTrackStrip with origin " + strip.origin().toString());
}
return strip;
}
- private void addRotatedHitsToEvent(EventHeader event, List<HelicalTrackCross> stereohits) {
+ private void addRotatedHitsToEvent(EventHeader event, List<HelicalTrackCross> stereohits) {
List<HelicalTrackHit> rotatedhits = new ArrayList<HelicalTrackHit>();
List<LCRelation> hthrelations = new ArrayList<LCRelation>();
@@ -370,14 +396,13 @@
mcrelations.add(new MyLCRelation(newhit, mcp));
}
}
-
- event.put("Rotated"+_outname, rotatedhits, HelicalTrackHit.class, 0);
- event.put("Rotated"+_hitrelname, hthrelations, LCRelation.class, 0);
- event.put("Rotated"+_mcrelname, mcrelations, LCRelation.class, 0);
-
-
+
+ event.put("Rotated" + _outname, rotatedhits, HelicalTrackHit.class, 0);
+ event.put("Rotated" + _hitrelname, hthrelations, LCRelation.class, 0);
+ event.put("Rotated" + _mcrelname, mcrelations, LCRelation.class, 0);
+
+
// Create the LCRelations between HelicalTrackHits and MC particles
}
-
}
CVSspam 0.2.12