Commit in hps-java/src/main/java/org/lcsim/hps/monitoring/svt on MAIN
SVTHitRecoCorrelations.java+292added 1.1
Cluster correlation plots.

hps-java/src/main/java/org/lcsim/hps/monitoring/svt
SVTHitRecoCorrelations.java added at 1.1
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;
+    }
+    
+  
+    
+    
+    
+}
CVSspam 0.2.12


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