Print

Print


Commit in hps-java/src/main on MAIN
resources/org/lcsim/hps/steering/EcalGainDriver.lcsim+102added 1.1
java/org/lcsim/hps/users/phansson/ECalGainDriver.java+512added 1.1
+614
2 added files
Driver to print for offline use.

hps-java/src/main/resources/org/lcsim/hps/steering
EcalGainDriver.lcsim added at 1.1
diff -N EcalGainDriver.lcsim
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ EcalGainDriver.lcsim	25 Jul 2012 22:27:49 -0000	1.1
@@ -0,0 +1,102 @@
+<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" 
+       xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">       
+    <control>
+        <numberOfEvents>-1</numberOfEvents>
+        <printInputFiles>true</printInputFiles>
+        <printDriversDetailed>true</printDriversDetailed>
+    </control>    
+    <execute>
+        <driver name="EventMarkerDriver"/>
+        <driver name="HPSCalibrationDriver"/>
+        <driver name="SVTSetupDriver"/>
+        <driver name="EcalRawConverter"/>
+        <driver name="EcalClusterer"/>
+        <driver name="RawTrackerHitMaker"/>
+        <driver name="RawTrackerHitFitterDriver"/>  
+        <driver name="TrackerHitDriver"/> 
+        <driver name="TrackerReconDriver"/>
+
+<!--
+        <driver name="SVTOccupancyPlots"/>
+        <driver name="TrackingReconstructionPlots"/>
+        <driver name="HPSSVTDAQMaps"/> 
+        <driver name="EcalMonitoringPlots"/>
+-->
+        <driver name="EcalGainDriver"/>    
+        
+        <driver name="CleanupDriver"/>
+<!--
+        <driver name="LCIOWriter"/>
+-->
+    </execute>    
+    <drivers>
+
+
+
+        <driver name="EcalGainDriver"
+		type="org.lcsim.hps.users.phansson.ECalGainDriver">
+                <debug>false</debug>
+                <hideFrame>true</hideFrame>
+		<outputPlotFileName>gaindriver.aida</outputPlotFileName>
+                <ecalGainFileName>clusterlist.txt</ecalGainFileName>
+	</driver>
+
+
+
+
+        <driver name="HPSCalibrationDriver" type="org.lcsim.hps.monitoring.HPSCalibrationDriver"/>   
+        <driver name="EcalRawConverter" 
+                type="org.lcsim.hps.recon.ecal.HPSEcalRawConverterDriver">
+			<ecalCollectionName>EcalCalHits</ecalCollectionName>
+	</driver>
+        <driver name="EcalClusterer"
+                type="org.lcsim.hps.recon.ecal.HPSEcalClusterer">
+			<ecalName>Ecal</ecalName>
+			<ecalCollectionName>EcalCalHits</ecalCollectionName>
+	</driver>
+        <driver name="RawTrackerHitFitterDriver"
+                type="org.lcsim.hps.recon.tracking.HPSRawTrackerHitFitterDriver">
+<!--                <fitAlgorithm>Dumb</fitAlgorithm>  -->
+           <fitAlgorithm>Analytic</fitAlgorithm>
+        </driver>
+        
+        
+        <driver name="TrackerHitDriver"
+                type="org.lcsim.hps.users.mgraham.DataTrackerHitDriver"/>
+        <driver name="EcalDaqPlots" type="org.lcsim.hps.monitoring.ecal.EcalDaqPlots">
+        </driver>
+        <driver name="CleanupDriver" 
+                type="org.lcsim.recon.tracking.digitization.sisim.config.ReadoutCleanupDriver">
+                <collectionNames>TrackerHits SVTRawTrackerHits  SVTFittedRawTrackerHits</collectionNames>
+         </driver>
+        <driver name="EcalMonitoringPlots" type="org.lcsim.hps.monitoring.ecal.EcalMonitoringPlots"/>
+        <driver name="EcalEventMonitor" type="org.lcsim.hps.monitoring.ecal.EcalEventMonitor">
+            <eventRefreshRate>1</eventRefreshRate>
+        </driver>
+        <driver name="SVTOccupancyPlots" type="org.lcsim.hps.monitoring.svt.SensorOccupancyPlotsDriver">
+            <rawTrackerHitCollectionName>SVTRawTrackerHits</rawTrackerHitCollectionName>
+            <eventRefreshRate>1</eventRefreshRate>
+        </driver>
+        <driver name="SVTSetupDriver"
+                type="org.lcsim.hps.recon.tracking.HPSSVTSensorSetup">   
+        </driver>
+        <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
+            <eventInterval>1000</eventInterval>
+        </driver> 
+	<driver name="RawTrackerHitMaker" type="org.lcsim.hps.recon.tracking.SVTDataToRawTrackerHitDriver"/>
+        <driver name="TrackerReconDriver"
+                type="org.lcsim.hps.recon.tracking.TrackerReconDriver">
+            <debug>false</debug>
+            <strategyResource>/org/lcsim/hps/recon/tracking/strategies/HPS-Test-4pt1.xml</strategyResource>
+            <stripMaxSeparation>20.0</stripMaxSeparation>
+            <stripTolerance>1.0</stripTolerance>
+        </driver>    
+        <driver name="TrackingReconstructionPlots" type="org.lcsim.hps.monitoring.svt.TrackingReconstructionPlots">
+                <outputPlots>trackingPlots.aida</outputPlots>
+        </driver>   
+        <driver name="LCIOWriter"
+                type="org.lcsim.util.loop.LCIODriver">
+            <outputFilePath>/Users/phansson/work/HPS/software/reco/run/hps_recon.slcio</outputFilePath>
+        </driver>
+    </drivers>
+</lcsim>

hps-java/src/main/java/org/lcsim/hps/users/phansson
ECalGainDriver.java added at 1.1
diff -N ECalGainDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ECalGainDriver.java	25 Jul 2012 22:27:49 -0000	1.1
@@ -0,0 +1,512 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.lcsim.hps.users.phansson;
+
+import org.lcsim.hps.recon.ecal.*;
+import hep.aida.*;
+import hep.aida.ref.histogram.Histogram1D;
+import hep.aida.ref.plotter.PlotterRegion;
+import java.awt.Button;
+import java.awt.FlowLayout;
+import java.awt.Frame;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowListener;
+import java.io.*;
+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 javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+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.RawTrackerHit;
+import org.lcsim.event.Track;
+import org.lcsim.event.base.BaseRawCalorimeterHit;
+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.monitoring.Redrawable;
+import org.lcsim.hps.monitoring.Resettable;
+import org.lcsim.hps.recon.ecal.HPSEcalRawConverterDriver;
+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;
+import org.lcsim.util.lcio.LCIOConstants;
+
+/**
+ *
+ * @author phansson+
+ */
+public class ECalGainDriver extends Driver implements Resettable, ActionListener, Redrawable {
+  
+    int nevents = 0;
+    boolean debug = true;
+    protected IDDecoder dec = null;
+    protected Subdetector ecal;
+    private String ecalName = "Ecal";
+    String rawCollectionName = "EcalReadoutHits";
+    String ecalReadoutName = "EcalHits";
+    String ecalTmpCollectionName = "EcalCalHitsTmp";
+    private String trackCollectionName = "MatchedTracks";
+    private String ecalClusterCollectionName = "EcalClusters";
+    private String outputPlotFileName = "test.aida";
+    private String ecalGainFileName = "clusterList.txt";
+    
+    //Print out cluster and track to file
+    PrintWriter gainWriter=null;
+        
+   
+    
+    
+    EcalTrackMatch trkMatchTool = null;
+    HPSEcalRawConverter converter = null; 
+
+    
+    
+    private boolean hideFrame = false;
+    private int refreshRate = 100;
+    private AIDA aida = AIDA.defaultInstance();
+    private IAnalysisFactory af = aida.analysisFactory();
+    IHistogramFactory hf = aida.histogramFactory();
+    private AIDAFrame plotterFrame;
+    private AIDAFrame pePlotterFrame;
+    IPlotter plotter;
+    JComboBox xCombo;
+    JLabel xLabel;
+    JComboBox yCombo;
+    JLabel yLabel;
+    Integer xList[];
+    Integer yList[];
+    JButton blankButton;
+
+    boolean alive = true;
+        
+        
+    
+    IHistogram1D pePlots[][][] = new IHistogram1D[47][11][5];
+    IHistogram2D mpePlot;
+    IHistogram2D spePlot;
+    IHistogram2D hitmap;
+    IHistogram1D[] h_PE_t = new IHistogram1D[5];
+    IHistogram1D[] h_PE_b = new IHistogram1D[5];
+    
+
+    
+    
+    
+    
+    public void startOfData() {
+    }
+    
+    public void detectorChanged(Detector detector) {
+	// Get the Subdetector.
+	ecal = detector.getSubdetector(ecalName);
+        
+        
+	
+        // Cache ref to decoder.
+	dec = ecal.getIDDecoder();
+        
+        
+                
+      
+        
+        
+        pePlotterFrame = new AIDAFrame();
+        pePlotterFrame.setTitle("Gain Frame");
+
+        //plotterFrame = new AIDAFrame();
+        //plotterFrame.setTitle("Gain General");
+        
+        IPlotterStyle style;
+        
+        
+        IPlotter plotter_hitmap_gr = af.createPlotterFactory().create();
+        plotter_hitmap_gr.createRegions(1,3,0);
+        plotter_hitmap_gr.setTitle("Cluster hit map");
+        plotter_hitmap_gr.style().statisticsBoxStyle().setVisible(false);
+        pePlotterFrame.addPlotter(plotter_hitmap_gr);
+      
+        hitmap = aida.histogram2D("Cluster hit map", 47, -23.5, 23.5, 11, -5.5, 5.5);
+        plotter_hitmap_gr.region(0).plot(hitmap);
+        
+        style = plotter_hitmap_gr.region(0).style();
+        style.setParameter("hist2DStyle", "colorMap");
+        style.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+        ((PlotterRegion) plotter_hitmap_gr.region(0)).getPlot().setAllowUserInteraction(true);
+        ((PlotterRegion) plotter_hitmap_gr.region(0)).getPlot().setAllowPopupMenus(true);
+
+        IPlotter[] plotter_PoverE = new IPlotter[5];
+                
+       
+        for(int iE=0;iE<=4;++iE) {
+            
+            String str = iE==0?"":(" iE="+iE);
+            
+            h_PE_t[iE] = aida.histogram1D("E over p top"+str,50,0,2);
+            h_PE_b[iE] = aida.histogram1D("E over p bottom"+str,50,0,2);
+            
+            plotter_PoverE[iE] = af.createPlotterFactory().create();
+            plotter_PoverE[iE].createRegions(1,2,0);
+            plotter_PoverE[iE].setTitle("E over P"+str);
+            plotter_PoverE[iE].style().statisticsBoxStyle().setVisible(true);
+            pePlotterFrame.addPlotter(plotter_PoverE[iE]);
+            
+            plotter_PoverE[iE].region(0).plot(h_PE_t[iE]);
+            plotter_PoverE[iE].region(1).plot(h_PE_b[iE]);
+        }
+        
+        plotter = af.createPlotterFactory().create();
+        plotter.createRegions(1,3,0);
+        plotter.setTitle("Gain Plots");
+        
+        pePlotterFrame.addPlotter(plotter);
+        
+        mpePlot = aida.histogram2D("<E over p>",47,-23.5,23.5,11,-5.5,5.5);
+        plotter.region(0).plot(mpePlot);
+        spePlot = aida.histogram2D("RMS(E over p)",47,-23.5,23.5,11,-5.5,5.5);
+        plotter.region(1).plot(spePlot);
+        plotter.region(0).style().statisticsBoxStyle().setVisible(false);
+        plotter.region(0).style().setParameter("hist2DStyle", "colorMap");
+        plotter.region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+        plotter.region(1).style().statisticsBoxStyle().setVisible(false);
+        plotter.region(1).style().setParameter("hist2DStyle", "colorMap");
+        plotter.region(1).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+        
+        
+        
+        for(int iE=0;iE<=4;++iE) {
+            for(int irow=-5;irow<=5;++irow) {
+                for(int icol=-23;icol<=23;++icol) {
+                    if(iE==0) {
+                        pePlots[icol+23][irow+5][iE] = aida.histogram1D("E over p x=" + icol + " y=" + irow, 50, 0,2);
+                    } else {
+                        pePlots[icol+23][irow+5][iE] = aida.histogram1D("E over p x=" + icol + " y=" + irow + " iE="+iE, 50, 0,2);
+                    }
+                }
+            }
+        }
+        
+        
+        xList = new Integer[46];
+        yList = new Integer[10];
+        int in=0;
+        for(int i=-5;i<=5;++i) {
+            if(i!=0) {
+                yList[in] = i;
+                ++in;
+            }
+        }
+        in=0;
+        for(int i=-23;i<=23;++i) {
+            if(i!=0) {
+                xList[in] = i;
+                ++in;
+            }
+        }
+        
+        
+        xCombo = new JComboBox(xList);
+        xCombo.addActionListener(this);
+        xLabel = new JLabel("x");
+        xLabel.setLabelFor(xCombo);
+        pePlotterFrame.getControlsPanel().add(xLabel);
+        pePlotterFrame.getControlsPanel().add(xCombo);
+        yCombo = new JComboBox(yList);
+        yCombo.addActionListener(this);
+        yLabel = new JLabel("y");
+        yLabel.setLabelFor(xCombo);
+        pePlotterFrame.getControlsPanel().add(yLabel);
+        pePlotterFrame.getControlsPanel().add(yCombo);
+        
+        
+        plotter.region(2).plot(pePlots[-5 + 23][2 + 5 - 1][0]); 
+        xCombo.setSelectedIndex(-5 + 23);
+        yCombo.setSelectedIndex(2 + 5 - 1);
+        
+        blankButton = new JButton("Hide histogram");
+        pePlotterFrame.getControlsPanel().add(blankButton);
+        blankButton.addActionListener(this);
+        
+        
+        
+            
+            
+        if(!hideFrame) {
+
+            //plotterFrame.pack();
+            //plotterFrame.setVisible(true);
+
+            pePlotterFrame.pack();
+            pePlotterFrame.setVisible(true);
+
+        }
+               
+        
+        
+      
+        
+        
+        
+    }
+    
+    public ECalGainDriver() {
+        converter = new HPSEcalRawConverter();
+        trkMatchTool = new EcalTrackMatch(false);
+        
+        
+        
+        try {
+            gainWriter = new PrintWriter(ecalGainFileName);
+        } catch (FileNotFoundException ex) {
+            Logger.getLogger(ECalGainDriver.class.getName()).log(Level.SEVERE, null, ex);
+        }
+
+
+    
+    }
+    
+
+    
+   
+    
+    public void setDebug(boolean flag) {
+        this.debug = flag;
+    }
+    
+    public void setOutputPlotFileName( String name ) {
+        this.outputPlotFileName = name;
+    }
+    
+    public void setEcalGainFileName( String name ) {
+        this.ecalGainFileName = name;
+    }
+    
+    public void setHideFrame( boolean val ) {
+        this.hideFrame = val;
+    }
+    
+    
+    
+    public void process(EventHeader event) {
+        ++nevents;
+        if( debug ) {
+            System.out.println("Processing event " + nevents);    
+        }
+        
+        if( refreshRate > 0 && nevents % refreshRate == 0 ) {
+            redraw();
+        }
+
+        
+        
+        List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, ecalClusterCollectionName);
+        
+        if(debug) System.out.println(clusters.size() + " clusters found");
+
+        
+        List<Track> tracks = null;
+        if(event.hasCollection(Track.class, trackCollectionName)) {
+                tracks = event.get(Track.class, trackCollectionName);
+        }
+        
+        if(debug) System.out.println( tracks.size() + " tracks in this event");
+        
+        if(tracks==null) return;
+        
+        
+        
+        for(HPSEcalCluster cl : clusters) {
+        
+            
+            
+            
+            int[] pos = getCrystalPair(cl);
+            int side = pos[1]>0 ? 0 : 1; //top or bottom
+
+            if(debug) System.out.println("Looking at cluster at ix=" + pos[0] + " iy=" + pos[1]);
+            
+            trkMatchTool.setCluster(cl);
+            trkMatchTool.match(tracks);
+            
+            if(!trkMatchTool.isMatchedY(50)) {
+                if(debug) System.out.println("Cluster not matched to a track");
+                continue;
+            }
+            
+            
+            if(debug) System.out.println("Cluster matched to track at distance Y " + trkMatchTool.getDistanceToTrackInY() + " and X " + trkMatchTool.getDistanceToTrackInX());
+            
+            
+            double P = trkMatchTool.getMatchedTrack().getPX()*1000;
+            double E = cl.getEnergy();
+            double Ep = E;
+            double Eoverp = Ep/P;
+          
+            if(debug) System.out.println("P " + P + " E " + E);
+          
+            
+//            double Eseed = cl.getSeedHit().getRawEnergy();
+//            double ErawSum = 0;
+//            for(CalorimeterHit hit : cl.getCalorimeterHits()) {
+//                ErawSum += hit.getRawEnergy();
+//            }
+//            
+//            if(Eseed/ErawSum<0.6) continue;
+//            
+            int ebin = -1;
+            if(P>500&&P<=700) ebin=1;
+            else if(P>700&&P<=900) ebin=2;
+            else if(P>900&&P<=1100) ebin=3;
+            else ebin=4;
+            
+            if(side==0) {
+                h_PE_t[0].fill(Eoverp);
+                h_PE_t[ebin].fill(Eoverp);
+                
+            }
+            else {
+                h_PE_b[0].fill(Eoverp);
+                h_PE_b[ebin].fill(Eoverp);
+            }
+            
+            hitmap.fill(pos[0], pos[1]);
+            
+            pePlots[pos[0]+23][pos[1]+5][0].fill(Eoverp);
+            
+            pePlots[pos[0]+23][pos[1]+5][ebin].fill(Eoverp);
+            
+            
+            gainWriter.print(event.getEventNumber()+" "+P+" "+E+" "+pos[0]+" "+pos[1]);
+            for(CalorimeterHit hit: cl.getCalorimeterHits()) {
+                gainWriter.print(" "+hit.getIdentifierFieldValue("ix")+" "+hit.getIdentifierFieldValue("iy")+" "+hit.getRawEnergy()+" "+converter.gain );
+            }
+            gainWriter.println("");
+            
+            
+            
+            
+                
+        }
+    
+    
+    
+    
+    }
+       
+    
+    
+    
+    
+    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() {
+        
+        redraw();
+        
+        if (outputPlotFileName != "")
+        try {
+            aida.saveAs(outputPlotFileName);
+        } catch (IOException ex) {
+            Logger.getLogger(ECalGainDriver.class.getName()).log(Level.SEVERE, "Couldn't save aida plots to file " + outputPlotFileName, ex);
+        }
+        //displayFastTrackingPlots();
+        
+        gainWriter.close();
+        
+    }
+
+    @Override
+    public void reset() {
+        if (plotter != null) {
+            plotter.hide();
+            plotter.destroyRegions();
+            for (int x = -23; x <= 23; x++) { // slot
+                for (int y = -5; y <= 5; y++) { // crate  
+                    for(int iE=0;iE<=4;++iE) {
+                        pePlots[x + 23][y + 5][iE].reset();
+                    }
+                }
+            }
+        }
+        //throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent ae) {
+        
+        if(ae.getSource()==blankButton) {
+            plotter.region(2).clear();
+        } else {
+            //get the col and row to display
+            Integer x = (Integer) xCombo.getSelectedItem();
+            Integer y = (Integer) yCombo.getSelectedItem();
+            plotter.region(2).clear();
+            plotter.region(2).plot(pePlots[x+23][y+5][0]);
+        }
+        
+        
+        //throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void redraw() {
+        
+        //do something if needed
+        mpePlot.reset();
+        spePlot.reset();
+        
+        for(int irow=-5;irow<=5;++irow) {
+            for(int icol=-23;icol<=23;++icol) {
+                //System.out.println(" redraw irow " + irow + " icol " + icol + " entries " + pePlots[icol+23][irow+5].entries());
+                if(pePlots[icol+23][irow+5][0].entries()>10) {
+                    mpePlot.fill(icol,irow,pePlots[icol+23][irow+5][0].mean());
+                    spePlot.fill(icol,irow,pePlots[icol+23][irow+5][0].rms());
+                    
+                }
+            }
+        }
+        
+        
+        //throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void setEventRefreshRate(int eventRefreshRate) {
+        refreshRate = eventRefreshRate;
+        //throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    
+}
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