Commit in hps-java/src/main on MAIN | |||
java/org/lcsim/hps/users/mgraham/HitTimePlotter.java | +487 | added 1.1 | |
/DetailedAnalysisDriver.java | +158 | -78 | 1.7 -> 1.8 |
/MainJASDriver.java | +23 | -12 | 1.6 -> 1.7 |
resources/org/lcsim/hps/steering/users/mgraham/HitTimeStudies.lcsim | +65 | added 1.1 | |
java/org/lcsim/hps/recon/tracking/HPSRawTrackerHitFitterDriver.java | +7 | -1 | 1.16 -> 1.17 |
/HPSSVTCalibrationConstants.java | +256 | -88 | 1.23 -> 1.24 |
/HelicalTrackHitDriver.java | +126 | -101 | 1.1 -> 1.2 |
+1122 | -280 |
Added svt t0 shift correction and t0 cut implementation.
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; + } +}
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; } }
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());
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>
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);
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; + }
}
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 }
-
}
Use REPLY-ALL to reply to list
To unsubscribe from the LCD-CVS list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCD-CVS&A=1