Author: [log in to unmask]
Date: Thu Sep 24 15:31:16 2015
New Revision: 3707
Log:
add ssp results and use result objects to xcheck
Added:
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerTurnOnSSPDriver.java
Modified:
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerTurnOnDriver.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/TriggerDecisionCalculator.java
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerTurnOnDriver.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerTurnOnDriver.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerTurnOnDriver.java Thu Sep 24 15:31:16 2015
@@ -8,15 +8,21 @@
import hep.aida.IPlotter;
import hep.aida.IPlotterStyle;
+import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.hps.analysis.trigger.util.SinglesTrigger;
import org.hps.analysis.trigger.util.TriggerDecisionCalculator;
import org.hps.analysis.trigger.util.TriggerDecisionCalculator.TriggerType;
+import org.hps.record.triggerbank.AbstractIntData;
+import org.hps.record.triggerbank.SSPCluster;
+import org.hps.record.triggerbank.SSPData;
import org.hps.util.BasicLogFormatter;
import org.lcsim.event.Cluster;
import org.lcsim.event.EventHeader;
+import org.lcsim.event.GenericObject;
import org.lcsim.geometry.Detector;
import org.lcsim.util.Driver;
import org.lcsim.util.aida.AIDA;
@@ -32,6 +38,10 @@
private final String ecalClusterCollectionName = "EcalClustersCorr";
IPlotter plotter;
IPlotter plotter2;
+ IPlotter plotter3;
+ IPlotter plotter33;
+ IPlotter plotter333;
+
private AIDA aida = AIDA.defaultInstance();
IHistogram1D clusterE_Random;
IHistogram1D clusterE_RandomSingles1;
@@ -39,8 +49,14 @@
IHistogram1D clusterEOne_RandomSingles1;
IHistogram1D clusterE_RandomSingles1_trigEff;
IHistogram1D clusterEOne_RandomSingles1_trigEff;
- private boolean showPlots = false;
+ IHistogram1D clusterEOne_RandomSingles1_thetaY_trigEff[][] = new IHistogram1D[2][5];
+ IHistogram1D clusterEOne_Random_thetaY[][] = new IHistogram1D[2][5];
+ IHistogram1D clusterEOne_RandomSingles1_thetaY[][] = new IHistogram1D[2][5];
+
+ private boolean showPlots = true;
private int nEventsProcessed = 0;
+ private int nSimSingles1 = 0;
+ private int nResultSingles1 = 0;
/**
*
@@ -58,22 +74,42 @@
IPlotterStyle style = plotter.style();
style.dataStyle().fillStyle().setColor("yellow");
style.dataStyle().errorBarStyle().setVisible(false);
- plotter.createRegions(2, 2);
- clusterE_Random = aida.histogram1D("clusterE_Random", 50, 0., 1.5);
- clusterE_RandomSingles1 = aida.histogram1D("clusterE_RandomSingles1", 50, 0., 1.5);
+ plotter.createRegions(1, 3);
+ clusterE_Random = aida.histogram1D("clusterE_Random", 50, 0., 1.3);
+ clusterE_RandomSingles1 = aida.histogram1D("clusterE_RandomSingles1", 50, 0., 1.3);
plotter.setTitle("Cluster E efficiency");
plotter.region(0).plot(clusterE_Random);
plotter.region(1).plot(clusterE_RandomSingles1);
if(showPlots) plotter.show();
plotter2 = fac.createPlotterFactory().create("Trigger Efficiency One");
- plotter2.createRegions(2, 2);
- clusterEOne_Random = aida.histogram1D("clusterEOne_Random", 50, 0., 1.5);
- clusterEOne_RandomSingles1 = aida.histogram1D("clusterEOne_RandomSingles1", 50, 0., 1.5);
+ plotter2.createRegions(1, 3);
+ clusterEOne_Random = aida.histogram1D("clusterEOne_Random", 50, 0., 1.3);
+ clusterEOne_RandomSingles1 = aida.histogram1D("clusterEOne_RandomSingles1", 50, 0., 1.3);
plotter2.region(0).plot(clusterEOne_Random);
plotter2.region(1).plot(clusterEOne_RandomSingles1);
if(showPlots) plotter2.show();
+ plotter3 = fac.createPlotterFactory().create("Cluster energy One ThetaY");
+ plotter3.createRegions(2, 5);
+ plotter33 = fac.createPlotterFactory().create("Cluster energy One ThetaY");
+ plotter33.createRegions(2, 5);
+ plotter333 = fac.createPlotterFactory().create("Trigger Efficiency One ThetaY");
+ plotter333.createRegions(2, 5);
+ int r = 0;
+ for(int i=0; i<2; ++i) {
+ for( int y=1; y<6; ++y) {
+ clusterEOne_Random_thetaY[i][y-1] = aida.histogram1D("clusterEOne_Random_thetaY" + y + (i==0?"top":"bottom") , 50, 0., 1.3);
+ clusterEOne_RandomSingles1_thetaY[i][y-1] = aida.histogram1D("clusterEOne_RandomSingles1_thetaY" + y + (i==0?"top":"bottom") , 50, 0., 1.3);
+ plotter3.region(r).plot(clusterEOne_Random_thetaY[i][y-1]);
+ plotter33.region(r).plot(clusterEOne_RandomSingles1_thetaY[i][y-1]);
+ r++;
+ }
+ }
+ if(showPlots) plotter3.show();
+ if(showPlots) plotter33.show();
+ if(showPlots) plotter333.show();
+
}
@Override
@@ -90,8 +126,15 @@
if(triggerDecisions.passed(TriggerType.SINGLES1))
logger.fine("Singles1 trigger fired");
- if(triggerDecisions.passed(TriggerType.SINGLES1_SIM))
+ if(triggerDecisions.passed(TriggerType.SINGLES1_SIM)) {
logger.fine("Sim Singles1 trigger fired");
+ nSimSingles1++;
+ }
+
+ if(triggerDecisions.passed(TriggerType.SINGLES1_RESULTS)) {
+ logger.fine("Results Singles1 trigger fired");
+ nResultSingles1++;
+ }
List<Cluster> clusters = null;
@@ -116,6 +159,12 @@
clusterE_Random.fill(clusterEMax.getEnergy());
if(clusters.size() == 1) {
clusterEOne_Random.fill(clusterEMax.getEnergy());
+ int clusterPosIdy = clusterEMax.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
+ if( Math.abs(clusterPosIdy) > 5 )
+ throw new RuntimeException("invalid crystal position " + clusterPosIdy);
+ int half = clusterPosIdy > 0 ? 0 : 1;
+ clusterEOne_Random_thetaY[half][Math.abs(clusterPosIdy)-1].fill(clusterEMax.getEnergy());
+
}
}
@@ -126,6 +175,10 @@
clusterE_RandomSingles1.fill(clusterEMax.getEnergy());
if(clusters.size() == 1)
clusterEOne_RandomSingles1.fill(clusterEMax.getEnergy());
+ int clusterPosIdy = clusterEMax.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
+ int half = clusterPosIdy > 0 ? 0 : 1;
+ clusterEOne_RandomSingles1_thetaY[half][Math.abs(clusterPosIdy)-1].fill(clusterEMax.getEnergy());
+
}
}
@@ -137,12 +190,41 @@
@Override
protected void endOfData() {
logger.info("Processed " + nEventsProcessed);
+ logger.info("nResSingles1 " + nResultSingles1 + " nSimSingles1 " + nSimSingles1);
clusterE_RandomSingles1_trigEff = aida.histogramFactory().divide("trigEff", clusterE_RandomSingles1, clusterE_Random);
clusterEOne_RandomSingles1_trigEff = aida.histogramFactory().divide("trigEffEone", clusterEOne_RandomSingles1, clusterEOne_Random);
+ int r = 0;
+ for(int i=0;i<2;++i) {
+ for(int y=0;y<5;++y) {
+ clusterEOne_RandomSingles1_thetaY_trigEff[i][y] = aida.histogramFactory().divide("trigEffEone", clusterEOne_Random_thetaY[i][y], clusterEOne_RandomSingles1_thetaY[i][y]);
+ plotter333.region(r);
+ r++;
+ }
+ }
logger.info("entries in clusterE_RandomSingles1_trigEff: " + Integer.toString(clusterE_RandomSingles1_trigEff.allEntries()));
plotter.region(2).plot(clusterE_RandomSingles1_trigEff);
plotter2.region(2).plot(clusterEOne_RandomSingles1_trigEff);
-
- }
+ plotter2.region(2).plot(clusterEOne_RandomSingles1_trigEff);
+
+ }
+
+ private List<SSPCluster> getSingles1SSPClusters(EventHeader event) {
+ List<SSPCluster> clusters = new ArrayList<SSPCluster>();
+ List<GenericObject> triggerBanks = event.get(GenericObject.class, "TriggerBank");
+ for (GenericObject triggerBank : triggerBanks) {
+ if(AbstractIntData.getTag(triggerBank) == SSPData.BANK_TAG) {
+ SSPData sspBank = new SSPData(triggerBank);
+
+ // recompute the decision for singles1
+ List<SSPCluster> sspClusters = sspBank.getClusters();
+ List<List<SinglesTrigger<SSPCluster>>> singleTriggers = TriggerDecisionCalculator.constructSinglesTriggersFromSSP(sspClusters);
+ for(SinglesTrigger<SSPCluster> singleTrigger : singleTriggers.get(1)) {
+ clusters.add( singleTrigger.getTriggerSource() );
+ }
+ }
+ }
+ return clusters;
+ }
+
}
Added: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerTurnOnSSPDriver.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerTurnOnSSPDriver.java (added)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerTurnOnSSPDriver.java Thu Sep 24 15:31:16 2015
@@ -0,0 +1,231 @@
+/**
+ *
+ */
+package org.hps.analysis.trigger;
+
+import hep.aida.IAnalysisFactory;
+import hep.aida.IHistogram1D;
+import hep.aida.IPlotter;
+import hep.aida.IPlotterStyle;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.hps.analysis.trigger.util.SinglesTrigger;
+import org.hps.analysis.trigger.util.TriggerDecisionCalculator;
+import org.hps.analysis.trigger.util.TriggerDecisionCalculator.TriggerType;
+import org.hps.record.triggerbank.AbstractIntData;
+import org.hps.record.triggerbank.SSPCluster;
+import org.hps.record.triggerbank.SSPData;
+import org.hps.util.BasicLogFormatter;
+import org.lcsim.event.Cluster;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.GenericObject;
+import org.lcsim.geometry.Detector;
+import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
+import org.lcsim.util.log.LogUtil;
+
+/**
+ * @author Per Hansson Adrian <[log in to unmask]>, Matt Solt <[log in to unmask]>
+ *
+ */
+public class TriggerTurnOnSSPDriver extends Driver {
+
+ private static Logger logger = LogUtil.create(TriggerTurnOnSSPDriver.class, new BasicLogFormatter(), Level.FINE);
+ private final String ecalClusterCollectionName = "EcalClustersCorr";
+ IPlotter plotter;
+ IPlotter plotter2;
+ IPlotter plotter3;
+ IPlotter plotter33;
+ IPlotter plotter333;
+
+ private AIDA aida = AIDA.defaultInstance();
+ IHistogram1D clusterE_Random;
+ IHistogram1D clusterE_RandomSingles1;
+ IHistogram1D clusterEOne_Random;
+ IHistogram1D clusterEOne_RandomSingles1;
+ IHistogram1D clusterE_RandomSingles1_trigEff;
+ IHistogram1D clusterEOne_RandomSingles1_trigEff;
+ IHistogram1D clusterEOne_RandomSingles1_thetaY_trigEff[][] = new IHistogram1D[2][5];
+ IHistogram1D clusterEOne_Random_thetaY[][] = new IHistogram1D[2][5];
+ IHistogram1D clusterEOne_RandomSingles1_thetaY[][] = new IHistogram1D[2][5];
+
+ private boolean showPlots = true;
+ private int nEventsProcessed = 0;
+ private int nSimSingles1 = 0;
+ private int nResultSingles1 = 0;
+
+ /**
+ *
+ */
+ public TriggerTurnOnSSPDriver() {
+ }
+
+ @Override
+ protected void detectorChanged(Detector detector) {
+
+ aida.tree().cd("/");
+ IAnalysisFactory fac = aida.analysisFactory();
+
+ plotter = fac.createPlotterFactory().create("Trigger efficiency SSP");
+ IPlotterStyle style = plotter.style();
+ style.dataStyle().fillStyle().setColor("yellow");
+ style.dataStyle().errorBarStyle().setVisible(false);
+ plotter.createRegions(1, 3);
+ clusterE_Random = aida.histogram1D("SSP_clusterE_Random", 50, 0., 1.3);
+ clusterE_RandomSingles1 = aida.histogram1D("SSP_clusterE_RandomSingles1", 50, 0., 1.3);
+ plotter.setTitle("Cluster E efficiency");
+ plotter.region(0).plot(clusterE_Random);
+ plotter.region(1).plot(clusterE_RandomSingles1);
+ if(showPlots) plotter.show();
+
+ plotter2 = fac.createPlotterFactory().create("Trigger efficiency One SSP");
+ plotter2.createRegions(1, 3);
+ clusterEOne_Random = aida.histogram1D("SSP_clusterEOne_Random", 50, 0., 1.3);
+ clusterEOne_RandomSingles1 = aida.histogram1D("SSP_clusterEOne_RandomSingles1", 50, 0., 1.3);
+ plotter2.region(0).plot(clusterEOne_Random);
+ plotter2.region(1).plot(clusterEOne_RandomSingles1);
+ if(showPlots) plotter2.show();
+
+ plotter3 = fac.createPlotterFactory().create("Cluster energy One ThetaY SSP");
+ plotter3.createRegions(2, 5);
+ plotter33 = fac.createPlotterFactory().create("Cluster energy One ThetaY SSP");
+ plotter33.createRegions(2, 5);
+ plotter333 = fac.createPlotterFactory().create("Trigger efficiency One ThetaY SSP");
+ plotter333.createRegions(2, 5);
+ int r = 0;
+ for(int i=0; i<2; ++i) {
+ for( int y=1; y<6; ++y) {
+ clusterEOne_Random_thetaY[i][y-1] = aida.histogram1D("SSP_clusterEOne_Random_thetaY" + y + (i==0?"top":"bottom") , 50, 0., 1.3);
+ clusterEOne_RandomSingles1_thetaY[i][y-1] = aida.histogram1D("SSP_clusterEOne_RandomSingles1_thetaY" + y + (i==0?"top":"bottom") , 50, 0., 1.3);
+ plotter3.region(r).plot(clusterEOne_Random_thetaY[i][y-1]);
+ plotter33.region(r).plot(clusterEOne_RandomSingles1_thetaY[i][y-1]);
+ r++;
+ }
+ }
+ if(showPlots) plotter3.show();
+ if(showPlots) plotter33.show();
+ if(showPlots) plotter333.show();
+
+ }
+
+ @Override
+ protected void process(EventHeader event) {
+
+
+ TriggerDecisionCalculator triggerDecisions = new TriggerDecisionCalculator(event);
+
+ if(!triggerDecisions.passed(TriggerType.PULSER))
+ return;
+
+ logger.fine("pulser trigger fired");
+
+ if(triggerDecisions.passed(TriggerType.SINGLES1))
+ logger.fine("Singles1 trigger fired");
+
+ if(triggerDecisions.passed(TriggerType.SINGLES1_SIM)) {
+ logger.fine("Sim Singles1 trigger fired");
+ nSimSingles1++;
+ }
+
+ if(triggerDecisions.passed(TriggerType.SINGLES1_RESULTS)) {
+ logger.fine("Results Singles1 trigger fired");
+ nResultSingles1++;
+ }
+
+
+
+ List<SSPCluster> clusters = null;
+ SSPCluster clusterEMax = null;
+
+ clusters = this.getSingles1SSPClusters(event);
+
+
+ if(clusters != null) {
+ for(SSPCluster cluster : clusters) {
+ if(clusterEMax != null) {
+ if(cluster.getEnergy() > clusterEMax.getEnergy())
+ clusterEMax = cluster;
+ } else {
+ clusterEMax = cluster;
+ }
+ }
+ }
+
+ // fill denominator
+ if(clusterEMax!=null) {
+ clusterE_Random.fill(clusterEMax.getEnergy());
+ if(clusters.size() == 1) {
+ clusterEOne_Random.fill(clusterEMax.getEnergy());
+ int clusterPosIdy = clusterEMax.getYIndex();
+ if( Math.abs(clusterPosIdy) > 5 )
+ throw new RuntimeException("invalid crystal position " + clusterPosIdy);
+ int half = clusterPosIdy > 0 ? 0 : 1;
+ clusterEOne_Random_thetaY[half][Math.abs(clusterPosIdy)-1].fill(clusterEMax.getEnergy());
+
+ }
+ }
+
+ // fill numerator
+ if (triggerDecisions.passed(TriggerType.SINGLES1_SIM)) {
+ logger.fine("Eureka. They both fired.");
+ if(clusterEMax != null) {
+ clusterE_RandomSingles1.fill(clusterEMax.getEnergy());
+ if(clusters.size() == 1)
+ clusterEOne_RandomSingles1.fill(clusterEMax.getEnergy());
+ int clusterPosIdy = clusterEMax.getYIndex();
+ int half = clusterPosIdy > 0 ? 0 : 1;
+ clusterEOne_RandomSingles1_thetaY[half][Math.abs(clusterPosIdy)-1].fill(clusterEMax.getEnergy());
+
+ }
+ }
+
+ nEventsProcessed++;
+
+
+ }
+
+ @Override
+ protected void endOfData() {
+ logger.info("Processed " + nEventsProcessed);
+ logger.info("nResSingles1 " + nResultSingles1 + " nSimSingles1 " + nSimSingles1);
+ clusterE_RandomSingles1_trigEff = aida.histogramFactory().divide("trigEff", clusterE_RandomSingles1, clusterE_Random);
+ clusterEOne_RandomSingles1_trigEff = aida.histogramFactory().divide("trigEffEone", clusterEOne_RandomSingles1, clusterEOne_Random);
+ int r = 0;
+ for(int i=0;i<2;++i) {
+ for(int y=0;y<5;++y) {
+ clusterEOne_RandomSingles1_thetaY_trigEff[i][y] = aida.histogramFactory().divide("trigEffEone", clusterEOne_Random_thetaY[i][y], clusterEOne_RandomSingles1_thetaY[i][y]);
+ plotter333.region(r);
+ r++;
+ }
+ }
+ logger.info("entries in clusterE_RandomSingles1_trigEff: " + Integer.toString(clusterE_RandomSingles1_trigEff.allEntries()));
+ plotter.region(2).plot(clusterE_RandomSingles1_trigEff);
+ plotter2.region(2).plot(clusterEOne_RandomSingles1_trigEff);
+ plotter2.region(2).plot(clusterEOne_RandomSingles1_trigEff);
+
+ }
+
+ private List<SSPCluster> getSingles1SSPClusters(EventHeader event) {
+ List<SSPCluster> clusters = new ArrayList<SSPCluster>();
+ List<GenericObject> triggerBanks = event.get(GenericObject.class, "TriggerBank");
+ for (GenericObject triggerBank : triggerBanks) {
+ if(AbstractIntData.getTag(triggerBank) == SSPData.BANK_TAG) {
+ SSPData sspBank = new SSPData(triggerBank);
+
+ // recompute the decision for singles1
+ List<SSPCluster> sspClusters = sspBank.getClusters();
+ List<List<SinglesTrigger<SSPCluster>>> singleTriggers = TriggerDecisionCalculator.constructSinglesTriggersFromSSP(sspClusters);
+ for(SinglesTrigger<SSPCluster> singleTrigger : singleTriggers.get(1)) {
+ clusters.add( singleTrigger.getTriggerSource() );
+ }
+ }
+ }
+ return clusters;
+ }
+
+
+}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/TriggerDecisionCalculator.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/TriggerDecisionCalculator.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/TriggerDecisionCalculator.java Thu Sep 24 15:31:16 2015
@@ -9,6 +9,7 @@
import org.hps.record.triggerbank.AbstractIntData;
import org.hps.record.triggerbank.SSPCluster;
import org.hps.record.triggerbank.SSPData;
+import org.hps.record.triggerbank.SSPSinglesTrigger;
import org.hps.record.triggerbank.TIData;
import org.lcsim.event.EventHeader;
import org.lcsim.event.GenericObject;
@@ -20,7 +21,7 @@
public class TriggerDecisionCalculator {
public enum TriggerType {
- SINGLES0, SINGLES1, PAIR0, PAIR1, SINGLES1_SIM, PULSER
+ SINGLES0, SINGLES1, PAIR0, PAIR1, SINGLES1_SIM, PULSER, SINGLES1_RESULTS
}
private List<TriggerType> passedTriggers = new ArrayList<TriggerType>();
@@ -46,10 +47,29 @@
for (GenericObject triggerBank : triggerBanks) {
if(AbstractIntData.getTag(triggerBank) == SSPData.BANK_TAG) {
SSPData sspBank = new SSPData(triggerBank);
+
+ // recompute the decision for singles1
List<SSPCluster> sspClusters = sspBank.getClusters();
List<List<SinglesTrigger<SSPCluster>>> singleTriggers = constructSinglesTriggersFromSSP(sspClusters);
if( singleTriggers.get(1).size() > 0 )
passedTriggers.add(TriggerType.SINGLES1_SIM);
+
+ // "use trigger results objects"
+ List<SSPSinglesTrigger> triggerResults = sspBank.getSinglesTriggers();
+ boolean passedSingles1 = false;
+ resultLoop:
+ for(SSPSinglesTrigger result : triggerResults) {
+ // Check if this is a singles 1 trigger result.
+ if(result.isSecondTrigger()) {
+ // Check if the all the cuts passed.
+ if(result.passCutEnergyMin() && result.passCutEnergyMax() && result.passCutHitCount()) {
+ passedSingles1 = true;
+ break resultLoop;
+ }
+ }
+ }
+ if(passedSingles1)
+ passedTriggers.add(TriggerType.SINGLES1_RESULTS);
}
else if (AbstractIntData.getTag(triggerBank) == TIData.BANK_TAG) {
TIData tiData = new TIData(triggerBank);
|