Print

Print


Commit in hps-java/src/main on MAIN
resources/org/lcsim/hps/steering/EcalGainDriverSim.lcsim+94added 1.1
                                /EcalGainDriver.lcsim+16-201.1 -> 1.2
                                /HPSTestRunReconToEvio.lcsim+3-31.10 -> 1.11
java/org/lcsim/hps/users/phansson/ECalGainDriver.java+48-671.2 -> 1.3
java/org/lcsim/hps/recon/ecal/HPSEcalEdepToTriggerConverterDriver.java+162added 1.1
+323-90
2 added + 3 modified, total 5 files
ECalGainDriver prints E/p to text at end of run; can be run directly on SLIC output

hps-java/src/main/resources/org/lcsim/hps/steering
EcalGainDriverSim.lcsim added at 1.1
diff -N EcalGainDriverSim.lcsim
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ EcalGainDriverSim.lcsim	9 Aug 2012 22:27:10 -0000	1.1
@@ -0,0 +1,94 @@
+
+<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" 
+       xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">       
+    <inputFiles>
+        <file>${inputFile}</file>
+    </inputFiles>
+    <control>
+        <printInputFiles>true</printInputFiles>
+        <printDriversDetailed>true</printDriversDetailed>
+    </control>    
+    <execute>
+        <driver name="EventMarkerDriver"/>
+<!--        <driver name="Timer1"/>-->
+        <driver name="HPSCalibrationDriver"/>
+        <driver name="EcalRawConverter"/>
+        <driver name="EcalClusterer"/>
+        <driver name="EcalTriggerFilter"/>
+        <driver name="EcalTriggerClusterer"/>
+        <driver name="TrackerDigiDriver"/>
+<!--        <driver name="Timer2"/>-->
+        <driver name="TrackerReconDriver"/>
+<!--        <driver name="Timer3"/>-->
+
+        <driver name="EcalGainDriver"/>    
+        
+<!--        <driver name="CleanupDriver"/>-->
+<!--
+        <driver name="LCIOWriter"/>
+-->
+    </execute>    
+    <drivers>
+        <driver name="Timer1" type="org.lcsim.hps.util.TimerDriver">
+            <name>1</name>
+        </driver>
+        <driver name="Timer2" type="org.lcsim.hps.util.TimerDriver">   
+            <name>2</name>
+        </driver>
+        <driver name="Timer3" type="org.lcsim.hps.util.TimerDriver">   
+            <name>3</name>
+        </driver>
+        <driver name="EcalGainDriver"
+		type="org.lcsim.hps.users.phansson.ECalGainDriver">
+            <debug>false</debug>
+            <hideFrame>true</hideFrame>
+            <outputPlotFileName>gaindriver.aida</outputPlotFileName>
+            <ecalGainFileName>clusterlist.txt</ecalGainFileName>
+            <simTrigger>true</simTrigger>
+        </driver>
+
+        <driver name="HPSCalibrationDriver" type="org.lcsim.hps.monitoring.HPSCalibrationDriver"/>   
+        <driver name="EcalRawConverter" type="org.lcsim.hps.recon.ecal.HPSEcalEdepToTriggerConverterDriver">
+        </driver>
+        <driver name="EcalTriggerFilter" type="org.lcsim.hps.recon.ecal.HPSEcalTriggerFilterDriver">
+            <inputCollection>EcalTriggerHits</inputCollection>
+            <outputCollection>EcalFilteredHits</outputCollection>
+        </driver>        
+        <driver name="EcalTriggerClusterer"
+                type="org.lcsim.hps.recon.ecal.HPSEcalCTPClusterer">
+            <ecalName>Ecal</ecalName>
+            <ecalCollectionName>EcalFilteredHits</ecalCollectionName>
+            <clusterCollectionName>EcalTriggerClusters</clusterCollectionName>
+        </driver>
+        <driver name="EcalClusterer"
+                type="org.lcsim.hps.recon.ecal.HPSEcalClusterer">
+            <ecalName>Ecal</ecalName>
+            <ecalCollectionName>EcalCalHits</ecalCollectionName>
+        </driver>
+        <driver name="CleanupDriver" 
+                type="org.lcsim.recon.tracking.digitization.sisim.config.ReadoutCleanupDriver">
+            <collectionNames>TrackerHits</collectionNames>
+        </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="TrackerDigiDriver"
+                type="org.lcsim.hps.recon.tracking.TrackerDigiDriver">
+            <debug>false</debug>
+        </driver>
+        <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="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/resources/org/lcsim/hps/steering
EcalGainDriver.lcsim 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- EcalGainDriver.lcsim	25 Jul 2012 22:27:49 -0000	1.1
+++ EcalGainDriver.lcsim	9 Aug 2012 22:27:10 -0000	1.2
@@ -1,7 +1,7 @@
+
 <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>    
@@ -35,40 +35,36 @@
 
         <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>
-
-
-
+            <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>
+            <ecalCollectionName>EcalCalHits</ecalCollectionName>
+        </driver>
         <driver name="EcalClusterer"
                 type="org.lcsim.hps.recon.ecal.HPSEcalClusterer">
-			<ecalName>Ecal</ecalName>
-			<ecalCollectionName>EcalCalHits</ecalCollectionName>
-	</driver>
+            <ecalName>Ecal</ecalName>
+            <ecalCollectionName>EcalCalHits</ecalCollectionName>
+        </driver>
         <driver name="RawTrackerHitFitterDriver"
                 type="org.lcsim.hps.recon.tracking.HPSRawTrackerHitFitterDriver">
 <!--                <fitAlgorithm>Dumb</fitAlgorithm>  -->
-           <fitAlgorithm>Analytic</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>
+            <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>
@@ -83,7 +79,7 @@
         <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
             <eventInterval>1000</eventInterval>
         </driver> 
-	<driver name="RawTrackerHitMaker" type="org.lcsim.hps.recon.tracking.SVTDataToRawTrackerHitDriver"/>
+        <driver name="RawTrackerHitMaker" type="org.lcsim.hps.recon.tracking.SVTDataToRawTrackerHitDriver"/>
         <driver name="TrackerReconDriver"
                 type="org.lcsim.hps.recon.tracking.TrackerReconDriver">
             <debug>false</debug>
@@ -92,7 +88,7 @@
             <stripTolerance>1.0</stripTolerance>
         </driver>    
         <driver name="TrackingReconstructionPlots" type="org.lcsim.hps.monitoring.svt.TrackingReconstructionPlots">
-                <outputPlots>trackingPlots.aida</outputPlots>
+            <outputPlots>trackingPlots.aida</outputPlots>
         </driver>   
         <driver name="LCIOWriter"
                 type="org.lcsim.util.loop.LCIODriver">

hps-java/src/main/resources/org/lcsim/hps/steering
HPSTestRunReconToEvio.lcsim 1.10 -> 1.11
diff -u -r1.10 -r1.11
--- HPSTestRunReconToEvio.lcsim	9 Aug 2012 00:51:15 -0000	1.10
+++ HPSTestRunReconToEvio.lcsim	9 Aug 2012 22:27:10 -0000	1.11
@@ -11,15 +11,15 @@
     <execute>
         <driver name="LoadCalibrations"/>
         <driver name="HPSCalibrationDriver"/>  
-        <driver name="Timer1"/>
+<!--        <driver name="Timer1"/>-->
         <driver name="EcalReadout"/>
         <driver name="EcalConverter"/>
         <driver name="EcalClusterer"/>
         <driver name="EcalTrigger"/>
-        <driver name="Timer2"/>
+<!--        <driver name="Timer2"/>-->
         <driver name="SVTSensorSetup"/>
         <driver name="SVTReadout"/>
-        <driver name="Timer3"/>
+<!--        <driver name="Timer3"/>-->
         <driver name="TestRunReconToEvio"/>
         <driver name="ClockDriver"/>
         <driver name="CleanupDriver"/>    

hps-java/src/main/java/org/lcsim/hps/users/phansson
ECalGainDriver.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- ECalGainDriver.java	9 Aug 2012 00:51:15 -0000	1.2
+++ ECalGainDriver.java	9 Aug 2012 22:27:10 -0000	1.3
@@ -1,7 +1,3 @@
-/*
- * 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.*;
@@ -20,8 +16,6 @@
 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.monitoring.Redrawable;
 import org.lcsim.hps.monitoring.Resettable;
@@ -36,65 +30,45 @@
  */
 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 int nevents = 0;
+    private boolean debug = true;
     private String trackCollectionName = "MatchedTracks";
     private String ecalClusterCollectionName = "EcalClusters";
     private String outputPlotFileName = "test.aida";
     private String ecalGainFileName = "clusterList.txt";
+    private String triggerClusterCollection = "EcalTriggerClusters";
+    private double triggerThreshold = 10.0;
+    private boolean simTrigger = false;
     //Print out cluster and track to file
-    PrintWriter gainWriter = null;
-    EcalTrackMatch trkMatchTool = null;
+    private PrintWriter gainWriter = null;
+    private EcalTrackMatch trkMatchTool = 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];
-
-    @Override
-    public void startOfData() {
-    }
+    private IPlotter plotter;
+    private JComboBox xCombo;
+    private JLabel xLabel;
+    private JComboBox yCombo;
+    private JLabel yLabel;
+    private Integer xList[];
+    private Integer yList[];
+    private JButton blankButton;
+    private IHistogram1D pePlots[][][] = new IHistogram1D[47][11][5];
+    private IHistogram2D mpePlot;
+    private IHistogram2D spePlot;
+    private IHistogram2D hitmap;
+    private IHistogram1D[] h_PE_t = new IHistogram1D[5];
+    private IHistogram1D[] h_PE_b = new IHistogram1D[5];
 
     @Override
     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");
@@ -147,8 +121,6 @@
         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) {
@@ -161,7 +133,6 @@
             }
         }
 
-
         xList = new Integer[46];
         yList = new Integer[10];
         int in = 0;
@@ -179,7 +150,6 @@
             }
         }
 
-
         xCombo = new JComboBox(xList);
         xCombo.addActionListener(this);
         xLabel = new JLabel("x");
@@ -193,7 +163,6 @@
         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);
@@ -203,13 +172,8 @@
         blankButton.addActionListener(this);
 
         if (!hideFrame) {
-
-            //plotterFrame.pack();
-            //plotterFrame.setVisible(true);
-
             pePlotterFrame.pack();
             pePlotterFrame.setVisible(true);
-
         }
     }
 
@@ -227,6 +191,10 @@
         this.debug = flag;
     }
 
+    public void setSimTrigger(boolean simTrigger) {
+        this.simTrigger = simTrigger;
+    }
+
     public void setOutputPlotFileName(String name) {
         this.outputPlotFileName = name;
     }
@@ -241,6 +209,23 @@
 
     @Override
     public void process(EventHeader event) {
+        if (simTrigger) {
+            boolean trigger = false;
+            if (event.hasCollection(HPSEcalCluster.class, triggerClusterCollection)) {
+                for (HPSEcalCluster cluster : event.get(HPSEcalCluster.class, triggerClusterCollection)) {
+                    if (cluster.getEnergy() > triggerThreshold) {
+                        trigger = true;
+                    }
+                }
+            }
+            if (!trigger) {
+                return;
+            }
+            if (debug) {
+                System.out.println("Triggered");
+            }
+        }
+
         ++nevents;
         if (debug) {
             System.out.println("Processing event " + nevents);
@@ -285,12 +270,10 @@
                 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;
@@ -300,7 +283,6 @@
                 System.out.println("P " + P + " E " + E);
             }
 
-
 //            double Eseed = cl.getSeedHit().getRawEnergy();
 //            double ErawSum = 0;
 //            for(CalorimeterHit hit : cl.getCalorimeterHits()) {
@@ -335,7 +317,6 @@
 
             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() + " " + HPSEcalConditions.physicalToGain(hit.getCellID()));
@@ -344,7 +325,7 @@
         }
     }
 
-    public int[] getCrystalPair(HPSEcalCluster cluster) {
+    private int[] getCrystalPair(HPSEcalCluster cluster) {
         int[] pos = new int[2];
         pos[0] = cluster.getSeedHit().getIdentifierFieldValue("ix");
         pos[1] = cluster.getSeedHit().getIdentifierFieldValue("iy");
@@ -366,6 +347,11 @@
             }
         }
         //displayFastTrackingPlots();
+        for (int x = -23; x <= 23; x++) { // slot
+            for (int y = -5; y <= 5; y++) { // crate  
+                System.out.printf("%d\t%d\t%d\t%f\t%f\n", x, y, pePlots[x + 23][y + 5][0].allEntries(), pePlots[x + 23][y + 5][0].mean(), pePlots[x + 23][y + 5][0].rms());
+            }
+        }
 
         gainWriter.close();
     }
@@ -387,7 +373,6 @@
 
     @Override
     public void actionPerformed(ActionEvent ae) {
-
         if (ae.getSource() == blankButton) {
             plotter.region(2).clear();
         } else {
@@ -397,9 +382,6 @@
             plotter.region(2).clear();
             plotter.region(2).plot(pePlots[x + 23][y + 5][0]);
         }
-
-
-        //throw new UnsupportedOperationException("Not supported yet.");
     }
 
     @Override
@@ -415,7 +397,6 @@
                 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());
-
                 }
             }
         }

hps-java/src/main/java/org/lcsim/hps/recon/ecal
HPSEcalEdepToTriggerConverterDriver.java added at 1.1
diff -N HPSEcalEdepToTriggerConverterDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ HPSEcalEdepToTriggerConverterDriver.java	9 Aug 2012 22:27:10 -0000	1.1
@@ -0,0 +1,162 @@
+package org.lcsim.hps.recon.ecal;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.EventHeader;
+import org.lcsim.geometry.Detector;
+import org.lcsim.util.Driver;
+
+/**
+ *
+ * @version $Id: HPSEcalRawConverterDriver.java,v 1.2 2012/05/03 00:17:54
+ * phansson Exp $
+ */
+public class HPSEcalEdepToTriggerConverterDriver extends Driver {
+
+    private String ecalReadoutName = "EcalHits";
+    private String inputCollection = "EcalHits";
+    private String readoutCollection = "EcalCalHits";
+    private String triggerCollection = "EcalTriggerHits";
+    private boolean applyBadCrystalMap = true;
+    private double tp = 14.0;
+    private double readoutPeriod = 4.0;
+    private int readoutThreshold = 50;
+    private int triggerThreshold = 80;
+    private int truncateScale = 128;
+    private double pulseIntegral = tp * Math.E / readoutPeriod;
+    //normalization constant from cal gain (MeV/integral bit) to amplitude gain (amplitude bit/GeV)
+    private double gainNorm = 1000.0 / pulseIntegral;
+
+    public HPSEcalEdepToTriggerConverterDriver() {
+    }
+
+    public void setTp(double tp) {
+        this.tp = tp;
+    }
+
+    public void setReadoutCollection(String readoutCollection) {
+        this.readoutCollection = readoutCollection;
+    }
+
+    public void setTriggerCollection(String triggerCollection) {
+        this.triggerCollection = triggerCollection;
+    }
+
+    public void setInputCollection(String inputCollection) {
+        this.inputCollection = inputCollection;
+    }
+
+    public void setApplyBadCrystalMap(boolean apply) {
+        this.applyBadCrystalMap = apply;
+    }
+
+    public void setTruncateScale(int truncateScale) {
+        this.truncateScale = truncateScale;
+    }
+
+    @Override
+    public void startOfData() {
+        if (readoutCollection == null) {
+            throw new RuntimeException("The parameter ecalCollectionName was not set!");
+        }
+    }
+
+    @Override
+    public void detectorChanged(Detector detector) {
+    }
+
+    public boolean isBadCrystal(CalorimeterHit hit) {
+        return HPSEcalConditions.badChannelsLoaded() ? HPSEcalConditions.isBadChannel(hit.getCellID()) : false;
+    }
+
+    @Override
+    public void process(EventHeader event) {
+        ArrayList<CalorimeterHit> triggerHits = new ArrayList<CalorimeterHit>();
+        ArrayList<CalorimeterHit> readoutHits = new ArrayList<CalorimeterHit>();
+
+        if (event.hasCollection(CalorimeterHit.class, inputCollection)) {
+            List<CalorimeterHit> hits = event.get(CalorimeterHit.class, inputCollection);
+
+            for (CalorimeterHit hit : hits) {
+                if (applyBadCrystalMap && isBadCrystal(hit)) {
+                    continue;
+                }
+                CalorimeterHit triggerHit = makeTriggerHit(hit);
+                if (triggerHit != null) {
+                    triggerHits.add(triggerHit);
+                }
+                CalorimeterHit readoutHit = makeReadoutHit(hit);
+                if (readoutHit != null) {
+                    readoutHits.add(readoutHit);
+                }
+            }
+        }
+        int flags = 0;
+        event.put(triggerCollection, triggerHits, CalorimeterHit.class, flags, ecalReadoutName);
+        event.put(readoutCollection, readoutHits, CalorimeterHit.class, flags, ecalReadoutName);
+    }
+
+    public CalorimeterHit makeTriggerHit(CalorimeterHit hit) {
+        long id = hit.getCellID();
+        double amplitude = hit.getRawEnergy() * gainNorm / HPSEcalConditions.physicalToGain(id);
+
+//        double time = readoutPeriod * (Math.random() - 1);
+        double time = 0 - hit.getTime();
+        double triggerIntegral = 0;
+        boolean overThreshold = false;
+        while (true) {
+            double currentValue = amplitude * pulseAmplitude(time);
+            if (!overThreshold && currentValue > triggerThreshold) {
+                overThreshold = true;
+            }
+            if (overThreshold) {
+                triggerIntegral += amplitude * pulseAmplitude(time);
+                if (currentValue < triggerThreshold) {
+                    break;
+                }
+            }
+            time += readoutPeriod;
+
+            if (time > 200.0) {
+                break;
+            }
+        }
+
+//        System.out.format("%f %f %f\n", readoutIntegral, amplitude, triggerIntegral);
+
+        int truncatedIntegral = (int) Math.floor(triggerIntegral / truncateScale) * truncateScale;
+        if (truncatedIntegral <= 0) {
+            truncatedIntegral = 0;
+        }
+        CalorimeterHit h = new HPSRawCalorimeterHit(truncatedIntegral, hit.getPosition(), hit.getTime(), id, 0);
+        return h;
+    }
+
+    public CalorimeterHit makeReadoutHit(CalorimeterHit hit) {
+        long id = hit.getCellID();
+        double amplitude = hit.getRawEnergy() * gainNorm / HPSEcalConditions.physicalToGain(id);
+        if (amplitude < readoutThreshold) {
+            return null;
+        }
+        double integral = hit.getRawEnergy() * 1000.0;
+
+        CalorimeterHit h = new HPSRawCalorimeterHit(integral, hit.getPosition(), hit.getTime(), id, 0);
+        return h;
+    }
+
+    private double pulseAmplitude(double time) {
+        if (time <= 0.0) {
+            return 0.0;
+        }
+        if (tp > 0.0) {
+            return (time / tp) * Math.exp(1.0 - time / tp);
+        } else {
+            if (time < -tp) {
+                return 1.0;
+            } else {
+                return 0.0;
+            }
+        }
+    }
+}
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