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);