Author: [log in to unmask] Date: Tue Feb 3 15:18:45 2015 New Revision: 2034 Log: starting ecal pedmon Added: java/trunk/users/src/main/java/org/hps/users/baltzell/EcalPedestalPlots.java Added: java/trunk/users/src/main/java/org/hps/users/baltzell/EcalPedestalPlots.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/baltzell/EcalPedestalPlots.java (added) +++ java/trunk/users/src/main/java/org/hps/users/baltzell/EcalPedestalPlots.java Tue Feb 3 15:18:45 2015 @@ -0,0 +1,128 @@ +package org.hps.users.baltzell; + +import hep.aida.ICloud2D; +import hep.aida.IPlotter; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.hps.conditions.database.TableConstants; +import org.hps.conditions.ecal.EcalChannel; +import org.hps.conditions.ecal.EcalConditions; +import org.lcsim.conditions.ConditionsManager; +import org.lcsim.event.EventHeader; +import org.lcsim.event.RawCalorimeterHit; +import org.lcsim.geometry.Detector; +import org.lcsim.util.Driver; +import org.lcsim.util.aida.AIDA; + +public class EcalPedestalPlots extends Driver { + + AIDA aida = AIDA.defaultInstance(); + IPlotter plotter; + + final int NEV = 100; + final int NX = 46; + + long nev = 0; + int refreshRate = 1; + long thisTime, prevTime; + + List<ICloud2D> LT = new ArrayList<ICloud2D>(NX / 2); + List<ICloud2D> LB = new ArrayList<ICloud2D>(NX / 2); + List<ICloud2D> RT = new ArrayList<ICloud2D>(NX / 2); + List<ICloud2D> RB = new ArrayList<ICloud2D>(NX / 2); + + private EcalConditions ecalConditions = null; + + public EcalPedestalPlots() { + } + + protected void detectorChanged(Detector detector) { + ecalConditions = ConditionsManager.defaultInstance() + .getCachedConditions(EcalConditions.class,TableConstants.ECAL_CONDITIONS) + .getCachedData(); + for (int ii = 0; ii < NX / 2; ii++) { + LT.add(aida.cloud2D("EcalPedestalPlots:LT",1000)); + LB.add(aida.cloud2D("EcalPedestalPlots:LB",1000)); + RT.add(aida.cloud2D("EcalPedestalPlots:RT",1000)); + RB.add(aida.cloud2D("EcalPedestalPlots:RB",1000)); + } + thisTime = 0; + prevTime = 0; + + plotter.createRegions(2,2); + plotter.show(); + } + + public void process(EventHeader event) { + + if (!event.hasCollection(RawCalorimeterHit.class,"EcalReadoutHits")) { + return; + } + if (!event.hasCollection(Map.class,"EcalRunningPedestals")) { + return; + } + if (nev++ % NEV != 0) { + return; + } + + List<RawCalorimeterHit> hits = event.get(RawCalorimeterHit.class,"EcalReadoutHits"); + Map<RawCalorimeterHit, Double> peds = (Map<RawCalorimeterHit, Double>) event + .get("EcalRunningPedestals"); + + for (RawCalorimeterHit hit : hits) { + if (!peds.containsKey(hit)) { + continue; + } + + final double time = event.getTimeStamp()/1e9; + final double ped = peds.get(hit); + final EcalChannel chan = getChannel(hit); + final int xx = chan.getX(); + final int yy = chan.getY(); + + if (xx < 0) { + if (yy < 0) { + LB.get(xx + NX / 2).fill(time,ped); + } else { + LT.get(xx + NX / 2).fill(time,ped); + } + } else { + if (yy < 0) { + RB.get(xx + NX / 2 - 1).fill(time,ped); + } else { + RT.get(xx + NX / 2 - 1).fill(time,ped); + } + } + } + + thisTime = System.currentTimeMillis() / 1000; + if ((thisTime - prevTime) > refreshRate) { + prevTime = thisTime; + redraw(); + } + } + + void redraw() { + plotter.region(0).clear(); + plotter.region(1).clear(); + plotter.region(2).clear(); + plotter.region(3).clear(); + for (int ii = 0; ii < NX / 2; ii++) { + plotter.region(0).plot(LB.get(ii)); + plotter.region(1).plot(LT.get(ii)); + plotter.region(2).plot(RB.get(ii)); + plotter.region(3).plot(RT.get(ii)); + } + plotter.region(0).refresh(); + plotter.region(1).refresh(); + plotter.region(2).refresh(); + plotter.region(3).refresh(); + } + + public EcalChannel getChannel(RawCalorimeterHit hit) { + return ecalConditions.getChannelCollection().findGeometric(hit.getCellID()); + } +}