Commit in hps-java/src/main on MAIN | |||
resources/org/lcsim/hps/steering/EcalGainDriverSim.lcsim | +94 | added 1.1 | |
/EcalGainDriver.lcsim | +16 | -20 | 1.1 -> 1.2 |
/HPSTestRunReconToEvio.lcsim | +3 | -3 | 1.10 -> 1.11 |
java/org/lcsim/hps/users/phansson/ECalGainDriver.java | +48 | -67 | 1.2 -> 1.3 |
java/org/lcsim/hps/recon/ecal/HPSEcalEdepToTriggerConverterDriver.java | +162 | added 1.1 | |
+323 | -90 |
ECalGainDriver prints E/p to text at end of run; can be run directly on SLIC output
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>
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">
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"/>
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());
-
} } }
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; + } + } + } +}
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