Commit in hps-java/src/main/java/org/lcsim/hps/monitoring/svt on MAIN | |||
SVTHitRecoCorrelations.java | +292 | added 1.1 |
Cluster correlation plots.
diff -N SVTHitRecoCorrelations.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ SVTHitRecoCorrelations.java 10 May 2012 18:13:48 -0000 1.1 @@ -0,0 +1,292 @@
+package org.lcsim.hps.monitoring.svt; + +import hep.aida.*; +import java.io.IOException; +import java.util.ArrayList; +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.EventHeader; +import org.lcsim.event.RawTrackerHit; +import org.lcsim.geometry.Detector; +import org.lcsim.hps.monitoring.AIDAFrame; +import org.lcsim.hps.monitoring.Resettable; +import org.lcsim.hps.recon.tracking.HPSFittedRawTrackerHit; +import org.lcsim.hps.recon.tracking.HPSSVTCalibrationConstants; +import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D; +import org.lcsim.util.Driver; +import org.lcsim.util.aida.AIDA; + +/** + * + * @author mgraham + */ +public class SVTHitRecoCorrelations extends Driver implements Resettable { + + private AIDAFrame plotterFrame; + private List<IPlotter> plotters = new ArrayList<IPlotter>(); + private AIDA aida = AIDA.defaultInstance(); + private String rawTrackerHitCollectionName = "SVTRawTrackerHits"; + private String fittedTrackerHitCollectionName = "SVTFittedRawTrackerHits"; + private String trackerHitCollectionName = "StripClusterer_SiTrackerHitStrip1D"; + private String trackerName = "Tracker"; + private int eventCount; + private List<SiSensor> sensors; + IPlotter plotter; + IPlotter plotter2; + IPlotter plotter3; + IPlotter plotter4; + IPlotter plotter5; + private Map<String, Integer> sensorRegionMap; + private String outputPlots = null; + + protected void detectorChanged(Detector detector) { + plotterFrame = new AIDAFrame(); + plotterFrame.setTitle("HPS SVT Hit Reconstruction Correlation Plots"); + + aida.tree().cd("/"); + + + sensors = detector.getSubdetector(trackerName).getDetectorElement().findDescendants(SiSensor.class); + + // Map a map of sensors to their region numbers in the plotter. +// sensorRegionMap = new HashMap<String, Integer>(); +// for (SiSensor sensor : sensors) { +// int region = computePlotterRegion(sensor); +// sensorRegionMap.put(sensor.getName(), region); +// } + + IAnalysisFactory fac = aida.analysisFactory(); + plotter = fac.createPlotterFactory().create("Axial hits"); + plotter.setTitle("Axial hits top"); + plotterFrame.addPlotter(plotter); + plotters.add(plotter); + IPlotterStyle style = plotter.style(); + style.dataStyle().fillStyle().setColor("yellow"); + style.dataStyle().errorBarStyle().setVisible(false); + plotter.createRegions(5, 5); + + plotter2 = fac.createPlotterFactory().create("Stereo hits"); + plotter2.setTitle("Stereo hits top"); + plotterFrame.addPlotter(plotter2); + plotters.add(plotter2); + IPlotterStyle style2 = plotter2.style(); + style2.dataStyle().fillStyle().setColor("yellow"); + style2.dataStyle().errorBarStyle().setVisible(false); + plotter2.createRegions(5, 5); + + + + for (SiSensor ref_sensor : sensors) { + int ref_l = getLayer(ref_sensor); + int ref_s = getSide(ref_sensor); + boolean ref_a = isAxial(ref_sensor); + ref_l = getPhysLayer(ref_l,ref_a); + + + //if (!ref_a) continue; + //if (ref_s == 1 ) continue; //only top for now + + for (SiSensor sensor : sensors) { + int l = getLayer(sensor); + int s = getSide(sensor); + boolean a = isAxial(sensor); + + l = getPhysLayer(l,a); + + + //correlation with same side and axial/stereo + + if ( ref_a == a && ref_s == s ) { + + if(s == 0 && a ) { + IHistogram2D corPlot = aida.histogram2D("corr_TA_layer" + ref_l + "_layer" + l, 60, 10, 60.0, 60, 10, 60.0); + int region = (ref_l-1) + (l-1)*5; + //System.out.println("ref_l " + ref_l + " l " + l + " ---> " + region); + plotter.region(region).plot(corPlot); + } + if(s == 0 && !a ) { + IHistogram2D corPlot = aida.histogram2D("corr_TS_layer" + ref_l + "_layer" + l, 60, 10, 60.0, 60, 10, 60.0); + int region = (ref_l-1) + (l-1)*5; + //System.out.println("ref_l " + ref_l + " l " + l + " ---> " + region); + plotter2.region(region).plot(corPlot); + } + + } + + } + } + + plotterFrame.pack(); + plotterFrame.setVisible(true); + } + + public SVTHitRecoCorrelations() { + } + + public void setOutputPlots(String output) { + this.outputPlots = output; + } + + public void setRawTrackerHitCollectionName(String rawTrackerHitCollectionName) { + this.rawTrackerHitCollectionName = rawTrackerHitCollectionName; + } + + public void setFittedTrackerHitCollectionName(String fittedTrackerHitCollectionName) { + this.fittedTrackerHitCollectionName = fittedTrackerHitCollectionName; + } + + public void setTrackerHitCollectionName(String trackerHitCollectionName) { + this.trackerHitCollectionName = trackerHitCollectionName; + } + + public void process(EventHeader event) { +// +// if (!event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) { +// System.out.println(rawTrackerHitCollectionName + " does not exist; skipping event"); +// int ns = sensors.size(); +// for (int i = 0; i < ns; i++) { +// aida.histogram1D(sensors.get(i).getName() + "_raw_hits").fill(0); +// aida.histogram1D(sensors.get(i).getName() + "_reco_hits").fill(0); +// } +// +// return; +// } +// +// if (!event.hasCollection(HPSFittedRawTrackerHit.class, fittedTrackerHitCollectionName)) { +// System.out.println(fittedTrackerHitCollectionName + " does not exist; skipping event"); +// int ns = sensors.size(); +// for (int i = 0; i < ns; i++) { +// int nraw = sensors.get(i).getReadout().getHits(RawTrackerHit.class).size(); +// aida.histogram1D(sensors.get(i).getName() + "_raw_hits").fill(nraw); +// aida.histogram1D(sensors.get(i).getName() + "_reco_hits").fill(0); +// } +// return; +// } +// + + if (!HPSSVTCalibrationConstants.calibrationLoaded()) { + HPSSVTCalibrationConstants.loadCalibrationConstants(); + } + ++eventCount; +// List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName); +// List<HPSFittedRawTrackerHit> fittedrawHits = event.get(HPSFittedRawTrackerHit.class, fittedTrackerHitCollectionName); + List<SiTrackerHitStrip1D> stripHits = event.get(SiTrackerHitStrip1D.class, trackerHitCollectionName); +// for (HPSFittedRawTrackerHit hrth : fittedrawHits) { +// double fittedAmp = hrth.getAmp(); +// double fittedT0 = hrth.getT0(); +// String sensorName = hrth.getRawTrackerHit().getDetectorElement().getName(); +// aida.histogram1D(sensorName + "_timing").fill(fittedT0); +// aida.histogram1D(sensorName + "_amplitude").fill(fittedAmp); +// } +// for (SiSensor sensor : sensors) { +// String sensorName = sensor.getName(); +// int nraw = sensor.getReadout().getHits(RawTrackerHit.class).size(); +// int nreco = sensor.getReadout().getHits(HPSFittedRawTrackerHit.class).size(); +// aida.histogram1D(sensorName + "_raw_hits").fill(nraw); +// aida.histogram1D(sensorName + "_reco_hits").fill(nreco); +// } + for (SiTrackerHitStrip1D ref_cluster : stripHits) { + SiSensor ref_sensor = ref_cluster.getSensor(); + boolean ref_a = isAxial(ref_sensor); + int ref_side = getSide(ref_sensor); + int ref_l = getLayer(ref_sensor); + ref_l = getPhysLayer(ref_l,ref_a); + + for (SiTrackerHitStrip1D cluster : stripHits) { + SiSensor sensor = cluster.getSensor(); + boolean a = isAxial(sensor); + int side = getSide(sensor); + if (ref_a==a && ref_side==side) { + int l = getLayer(sensor); + l = getPhysLayer(l,a); + + + //int clusterSize = cluster.getRawHits().size(); + //Move this to strip nr? + if( side == 0 && a) { + aida.histogram2D("corr_TA_layer" + ref_l + "_layer" + l).fill(ref_cluster.getPosition()[1],cluster.getPosition()[1]); + } + if( side == 0 && !a) { + aida.histogram2D("corr_TS_layer" + ref_l + "_layer" + l).fill(ref_cluster.getPosition()[1],cluster.getPosition()[1]); + + } + } + } + } + + } + + public void endOfData() { + if (outputPlots != null) + try { + aida.saveAs(outputPlots); + } catch (IOException ex) { + Logger.getLogger(SVTHitRecoCorrelations.class.getName()).log(Level.SEVERE, null, ex); + } + plotterFrame.dispose(); + } + + @Override + public void reset() { + int ns = sensors.size(); + for (int i = 0; i < 5; i++) { + for (int ii = 0; ii < 5; ii++) { + aida.histogram2D("corr_TA_layer" + (i+1) + "_layer" + (ii+1)).reset(); + aida.histogram2D("corr_TS_layer" + (i+1) + "_layer" + (ii+1)).reset(); + } + } + + } + + + private int getPhysLayer(int l,boolean axial) { + if(axial) { + l = (l+1)/2; + } else { + l = l/2; + } + return l; + } + + private int[] getSideAndLayer(SiSensor sensor) { + + IIdentifierHelper helper = sensor.getIdentifierHelper(); + 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 + int v[] = {module,layer}; + return v; + + + } + + private int getSide(SiSensor sensor) { + int v[] = getSideAndLayer(sensor); + return v[0]; + + } + + private int getLayer(SiSensor sensor) { + int v[] = getSideAndLayer(sensor); + return v[1]; + + } + + private boolean isAxial(SiSensor sensor) { + int v[] = getSideAndLayer(sensor); + int layer = v[1]; + if ( layer % 2 == 0 ) return false; + else return true; + } + + + + + +}
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