Commit in hps-java/src/main/java/org/lcsim/hps/users/phansson on MAIN
TrigRateDriver.java+388added 1.1
Plots for ecal rate measurement

hps-java/src/main/java/org/lcsim/hps/users/phansson
TrigRateDriver.java added at 1.1
diff -N TrigRateDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ TrigRateDriver.java	21 Jun 2012 15:35:15 -0000	1.1
@@ -0,0 +1,388 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.lcsim.hps.users.phansson;
+
+import hep.aida.*;
+import hep.aida.ref.plotter.PlotterRegion;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.lcsim.detector.identifier.ExpandedIdentifier;
+import org.lcsim.detector.identifier.IExpandedIdentifier;
+import org.lcsim.detector.identifier.IIdentifier;
+import org.lcsim.detector.identifier.IIdentifierHelper;
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.Track;
+import org.lcsim.geometry.Detector;
+import org.lcsim.geometry.IDDecoder;
+import org.lcsim.geometry.Subdetector;
+import org.lcsim.hps.monitoring.AIDAFrame;
+import org.lcsim.hps.recon.ecal.HPSEcalCluster;
+import org.lcsim.hps.recon.ecal.HPSEcalConditions;
+import org.lcsim.hps.recon.tracking.EcalTrackMatch;
+import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
+
+/**
+ *
+ * @author phansson+
+ */
+public class TrigRateDriver extends Driver {
+    
+    int nevents = 0;
+    boolean debug = true;
+    protected IDDecoder dec = null;
+    protected Subdetector ecal;
+    private String ecalName = "Ecal";
+    
+    
+    private static int crystalCols;
+    private static int crystalRows;
+    private boolean hideFrame = true;
+    
+    private String outputPlotFileName = "test.aida";
+    private String trackCollectionName = "MatchedTracks";
+    private String ecalClusterCollectionName = "EcalClusters";
+    
+
+    
+    EcalTrackMatch trkMatchTool;
+    
+    private boolean doTracking = true;
+    
+    private AIDA aida = AIDA.defaultInstance();
+    private IAnalysisFactory af = aida.analysisFactory();
+    IHistogramFactory hf = aida.histogramFactory();
+    private AIDAFrame plotterFrame;
+    private AIDAFrame plotterFrameTrig;
+    
+    IPlotter plotter_trig_tag;
+    
+    private int trigger[] = {0,0};
+
+    private static int nThr = 5;
+    private int eThr[] = {400,500,600,700,800};
+    
+    
+    private int refreshRate = 1000;
+    
+    // Cluster energy correction
+    double C_ep = 1.0; //1.0/0.3;
+
+    
+    
+    public void startOfData() {
+    }
+    
+    public void detectorChanged(Detector detector) {
+	// Get the Subdetector.
+	ecal = detector.getSubdetector(ecalName);
+
+	// Cache ref to decoder.
+	dec = ecal.getIDDecoder();
+        
+        //Ecal geometry
+        
+        crystalCols = 46;
+        crystalRows = 5;
+        
+      
+        
+        
+
+        plotterFrame = new AIDAFrame();
+        plotterFrame.setTitle("TrigRateFrame");
+        
+        IPlotterStyle style;
+        
+        
+        IPlotter plotter_hitmap_gr = af.createPlotterFactory().create();
+        plotter_hitmap_gr.createRegions(2,6,0);
+        plotter_hitmap_gr.setTitle("Cluster hit map gr");
+        plotter_hitmap_gr.style().statisticsBoxStyle().setVisible(false);
+        plotterFrame.addPlotter(plotter_hitmap_gr);
+
+        IPlotter plotter_hitY_gr = af.createPlotterFactory().create();
+        plotter_hitY_gr.createRegions(2,6,0);
+        plotter_hitY_gr.setTitle("Cluster hit Y gr");
+        plotter_hitY_gr.style().statisticsBoxStyle().setVisible(false);
+        plotterFrame.addPlotter(plotter_hitY_gr);
+
+        IPlotter plotter_ep_gr = af.createPlotterFactory().create();
+        plotter_ep_gr.createRegions(2,6,0);
+        plotter_ep_gr.setTitle("Cluster Eoverp gr");
+        plotter_ep_gr.style().statisticsBoxStyle().setVisible(false);
+        plotterFrame.addPlotter(plotter_ep_gr);
+
+        
+        
+        for(int iside=0;iside<2;++iside) {
+            String side = iside==0 ? "top" : "bottom";
+            double ymin = iside == 0 ? -0.5 : -5.5;
+            double ymax = iside == 0 ? 5.5 : 0.5;
+            
+            IHistogram h = aida.histogram2D("Cluster hit map good region " + side, 26, -25.5, 0.5, 6, ymin, ymax);
+            plotter_hitmap_gr.region((nThr+1)*iside).plot(h);
+            
+            IHistogram hy = aida.histogram1D("Cluster hit Y good region " + side, 7, -0.5, 6.5);
+            plotter_hitY_gr.region((nThr+1)*iside).plot(hy);
+            
+            IHistogram hep = aida.histogram1D("Cluster Eoverp good region " + side, 50, 0, 2);
+            plotter_ep_gr.region((nThr+1)*iside).plot(hep);
+            
+            
+            for(int i=0;i<nThr;++i) {            
+                int reg = ((nThr+1)*iside)+(i+1);
+                if(debug) System.out.println("reg " + reg);
+                h = aida.histogram2D("Cluster E>" + eThr[i] + "GeV hit map good region " + side, 26, -25.5, 0.5, 6, ymin, ymax);
+                plotter_hitmap_gr.region(reg).plot(h);
+                
+                hy = aida.histogram1D("Cluster E>" + eThr[i] + "GeV hit Y good region " + side, 7, -0.5,6.5);
+                plotter_hitY_gr.region(reg).plot(hy);
+                
+                hep = aida.histogram1D("Cluster E>" + eThr[i] + "GeV Eoverp good region " + side, 50, 0,2);
+                plotter_ep_gr.region(reg).plot(hep);
+                
+            
+            }
+        }
+        
+
+        for(int i=0;i<2*(nThr+1);++i) {
+                            
+            if(debug) System.out.println("i " + i);
+
+            style = plotter_hitmap_gr.region(i).style();
+            style.setParameter("hist2DStyle", "colorMap");
+            style.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+            ((PlotterRegion) plotter_hitmap_gr.region(i)).getPlot().setAllowUserInteraction(true);
+            ((PlotterRegion) plotter_hitmap_gr.region(i)).getPlot().setAllowPopupMenus(true);
+        }
+
+        
+        
+            
+            
+        if(!hideFrame) {
+
+            plotterFrame.pack();
+            plotterFrame.setVisible(true);
+        }
+               
+        
+        
+      
+        
+        
+        
+    }
+    
+    public TrigRateDriver() {
+    
+        trkMatchTool = new EcalTrackMatch(false);
+    
+    }
+    
+
+    
+
+    public void setDebug(boolean flag) {
+        this.debug = flag;
+    }
+    
+    public void setOutputPlotFileName( String name ) {
+        this.outputPlotFileName = name;
+    }
+    
+   public void setHideFrame( boolean val ) {
+        this.hideFrame = val;
+    }
+    
+    
+    
+    public void process(EventHeader event) {
+        ++nevents;
+        if( debug ) {
+            System.out.println("Processing event " + nevents);    
+        }
+
+        
+        
+        //fastTracking(event);
+        
+        List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, ecalClusterCollectionName); 
+        
+        
+        if(debug) System.out.println( clusters.size() + " ECal clusters in the event");
+        
+        //plotClusterDistr(clusters,"");
+        
+        
+        List<Track> tracks = null;
+        if(doTracking) {
+            if(event.hasCollection(Track.class, trackCollectionName)) {
+                tracks = event.get(Track.class, trackCollectionName);
+            } else {
+                tracks = new ArrayList<Track>();
+            }
+            if(debug) System.out.println( tracks.size() + " tracks in this event");
+        }
+        
+        
+        for(HPSEcalCluster cl : clusters) {
+          
+          
+            int[] crystalPair = getCrystalPair(cl);
+                
+            
+            
+            boolean clusterGoodRegion = false;
+            if(crystalPair[0]<0 && crystalPair[1]>1) clusterGoodRegion = true;
+            if(crystalPair[0]<0 && crystalPair[1]<-1) clusterGoodRegion = true;
+            
+            if(debug) {
+                if(crystalPair[1]<-1) {
+                    System.out.println("BOTTOM " + clusterGoodRegion);
+                }
+            }
+            
+            
+            double clEnergyCorr = cl.getEnergy()*C_ep;
+            
+            if(clusterGoodRegion) {
+                
+                
+                String side = crystalPair[1]>0 ? "top" : "bottom";
+                aida.histogram2D("Cluster hit map good region " + side).fill(crystalPair[0], crystalPair[1]);
+                int hitY = crystalPair[1]>0 ? crystalPair[1] : (-1*crystalPair[1]);
+                aida.histogram1D("Cluster hit Y good region " + side).fill(hitY);
+                double eoverp = -1;
+                if(doTracking) {
+                    trkMatchTool.setCluster(cl);
+                    trkMatchTool.match(tracks);
+                    if(trkMatchTool.isMatchedY(20)) {
+                        eoverp = cl.getEnergy()/(trkMatchTool.getMatchedTrack().getPX()*1000);
+                    }   
+                }
+                if(eoverp>0) aida.histogram1D("Cluster Eoverp good region " + side).fill(eoverp);
+                
+                if(debug) System.out.println("Ep = " + eoverp + " doTracking " + doTracking);
+                
+                
+                for(int i=0;i<nThr;++i){
+                    if(cl.getEnergy()>eThr[i]) {
+                        aida.histogram2D("Cluster E>" + eThr[i] + "GeV hit map good region " + side).fill(crystalPair[0], crystalPair[1]);
+                        aida.histogram1D("Cluster E>" + eThr[i] + "GeV hit Y good region " + side).fill(hitY);
+                        if(eoverp>0) aida.histogram1D("Cluster E>" + eThr[i] + "GeV Eoverp good region " + side).fill(eoverp);
+                    }
+                    
+                }
+            }
+          
+        }
+        
+
+    
+    
+    
+    
+    }
+       
+    
+    
+    
+  
+    
+    
+ 
+      
+    
+    
+     
+    private boolean hasBadNeighbours(HPSEcalCluster cluster) {
+        //check if this cluster has a neighbour that is dead or bad
+        if(!HPSEcalConditions.badChannelsLoaded()) return false;
+        List<CalorimeterHit> hits = cluster.getCalorimeterHits();
+        IIdentifierHelper helper = HPSEcalConditions.getHelper();
+        IExpandedIdentifier expId = new ExpandedIdentifier(helper.getIdentifierDictionary().getNumberOfFields());
+        expId.setValue(helper.getFieldIndex("system"), ecal.getSystemID());
+        
+        boolean bad = false;
+        
+        System.out.println("Checking cluster with " + cluster.getSize() + " hits for bad neighbours");
+        
+        for(CalorimeterHit hit : hits) {
+            IIdentifier compactId = hit.getIdentifier();   
+            //x-check
+            if(HPSEcalConditions.isBadChannel(hit.getCellID())) {
+                System.out.println("This cluster has a bad channel hit included!? ");
+                int x = helper.getValue(compactId, "ix");
+                int y = helper.getValue(compactId, "iy");
+                System.out.println(x + "," + y + " id " + hit.getCellID());
+                System.exit(1);
+            }
+            //Find crystal pair
+            
+              
+                        
+            int x = helper.getValue(compactId, "ix");
+            int y = helper.getValue(compactId, "iy");
+            System.out.println("Hit at " + x + "," + y);
+            for(int ix=x-1;ix!=x+2;++ix) {
+                for(int iy=y-1;iy!=y+2;++iy) {
+                    expId.setValue(helper.getFieldIndex("ix"), ix);
+                    expId.setValue(helper.getFieldIndex("iy"), iy);
+                    IIdentifier compactId_t = helper.pack(expId);
+                    System.out.println("Check" + ix + "," + iy + " id " + compactId_t.getValue());
+                    if(HPSEcalConditions.isBadChannel(compactId_t.getValue())) {
+                        System.out.println("This cell was BAD!");
+                        return true;
+                    }
+                }    
+            }
+            
+            
+        }
+        return false;
+        
+    }
+     
+    
+    
+    public int[] getCrystalPair(HPSEcalCluster cluster) {
+        int[] pos = new int[2];
+        pos[0] = cluster.getSeedHit().getIdentifierFieldValue("ix");
+        pos[1] = cluster.getSeedHit().getIdentifierFieldValue("iy");
+        
+        //System.out.println("cluster ix,iy " + pos[0] + "," + pos[1] + "    from pos  " + cluster.getSeedHit().getPositionVec().toString());
+        return pos;
+        //getCrystalPair(cluster.getPosition());
+    }
+    
+ 
+   
+
+    
+    
+        
+    
+    
+    public void endOfData() {
+        
+        if (outputPlotFileName != "")
+        try {
+            aida.saveAs(outputPlotFileName);
+        } catch (IOException ex) {
+            Logger.getLogger(TrigRateDriver.class.getName()).log(Level.SEVERE, "Couldn't save aida plots to file " + outputPlotFileName, ex);
+        }
+        //displayFastTrackingPlots();
+        
+    }
+
+    
+}
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