Author: [log in to unmask] Date: Tue Nov 4 20:49:21 2014 New Revision: 1431 Log: make various bank numbers configurable; implement engineering run event builder that uses the new bank numbers and SSP data object Added: java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java - copied, changed from r1425, java/trunk/evio/src/main/java/org/hps/evio/LCSimTestRunEventBuilder.java Modified: java/trunk/evio/src/main/java/org/hps/evio/ECalEvioReader.java java/trunk/evio/src/main/java/org/hps/evio/LCSimTestRunEventBuilder.java Modified: java/trunk/evio/src/main/java/org/hps/evio/ECalEvioReader.java ============================================================================= --- java/trunk/evio/src/main/java/org/hps/evio/ECalEvioReader.java (original) +++ java/trunk/evio/src/main/java/org/hps/evio/ECalEvioReader.java Tue Nov 4 20:49:21 2014 @@ -46,10 +46,14 @@ private static EcalConditions ecalConditions = null; private static IIdentifierHelper helper = null; - public ECalEvioReader() { + private int topBankTag, botBankTag; + + public ECalEvioReader(int topBankTag, int botBankTag) { + this.topBankTag = topBankTag; + this.botBankTag = botBankTag; hitCollectionName = "EcalReadoutHits"; - subDetector = DatabaseConditionsManager.getInstance().getDetectorObject().getSubdetector(subdetectorName); + subDetector = DatabaseConditionsManager.getInstance().getDetectorObject().getSubdetector(subdetectorName); // ECAL combined conditions object. ecalConditions = ConditionsManager.defaultInstance() @@ -60,6 +64,15 @@ System.out.println("You are now using the database conditions for ECalEvioReader.java"); // ID helper. // helper = detector.getSubdetector("Ecal").getDetectorElement().getIdentifierHelper(); + } + + public void setTopBankTag(int topBankTag) { + this.topBankTag = topBankTag; + + } + + public void setBotBankTag(int botBankTag) { + this.botBankTag = botBankTag; } @Override @@ -71,7 +84,13 @@ for (BaseStructure bank : event.getChildren()) { BaseStructureHeader header = bank.getHeader(); int crateBankTag = header.getTag(); - if (crateBankTag == EventConstants.ECAL_TOP_BANK_TAG || crateBankTag == EventConstants.ECAL_BOTTOM_BANK_TAG) { + int crate = 0; + if (crateBankTag == topBankTag) { + crate = 1; + } else if (crateBankTag == botBankTag) { + crate = 2; + } + if (crateBankTag == topBankTag||crateBankTag == botBankTag) { foundHits = true; if (bank.getChildCount() > 0) { if (debug) { @@ -79,39 +98,41 @@ } try { for (BaseStructure slotBank : bank.getChildren()) { - if (slotBank.getHeader().getTag() == EventConstants.TRIGGER_BANK_TAG) { - if (debug) { - int[] data = slotBank.getIntData(); - for (int i = 0; i < data.length; i++) { - System.out.format("0x%x\n", data[i]); +// if (isTriggerBank(slotBank.getHeader().getTag(), lcsimEvent.getRunNumber()) != 0) { +// if (debug) { +// int[] data = slotBank.getIntData(); +// for (int i = 0; i < data.length; i++) { +// System.out.format("0x%x\n", data[i]); +// } +// } +// continue; +// } + if (slotBank.getCompositeData() != null) { //skip SSP and TI banks, if any + for (CompositeData cdata : slotBank.getCompositeData()) { +// CompositeData cdata = slotBank.getCompositeData(); + if (slotBank.getHeader().getTag() != bankTag) { + bankTag = slotBank.getHeader().getTag(); + System.out.printf("ECal format tag: 0x%x\n", bankTag); } - } - continue; - } - for (CompositeData cdata : slotBank.getCompositeData()) { -// CompositeData cdata = slotBank.getCompositeData(); - if (slotBank.getHeader().getTag() != bankTag) { - bankTag = slotBank.getHeader().getTag(); - System.out.printf("ECal format tag: 0x%x\n", bankTag); - } - switch (slotBank.getHeader().getTag()) { - case EventConstants.ECAL_WINDOW_BANK_TAG: - hits.addAll(makeWindowHits(cdata, crateBankTag)); - hitClass = RawTrackerHit.class; - flags = 0; - break; - case EventConstants.ECAL_PULSE_BANK_TAG: - hits.addAll(makePulseHits(cdata, crateBankTag)); - hitClass = RawTrackerHit.class; - flags = 0; - break; - case EventConstants.ECAL_PULSE_INTEGRAL_BANK_TAG: - hits.addAll(makeIntegralHits(cdata, crateBankTag)); - hitClass = BaseRawCalorimeterHit.class; - flags = (1 << LCIOConstants.RCHBIT_TIME); //store timestamp - break; - default: - throw new RuntimeException("Unsupported ECal format - bank tag " + slotBank.getHeader().getTag()); + switch (slotBank.getHeader().getTag()) { + case EventConstants.ECAL_WINDOW_BANK_TAG: + hits.addAll(makeWindowHits(cdata, crate)); + hitClass = RawTrackerHit.class; + flags = 0; + break; + case EventConstants.ECAL_PULSE_BANK_TAG: + hits.addAll(makePulseHits(cdata, crate)); + hitClass = RawTrackerHit.class; + flags = 0; + break; + case EventConstants.ECAL_PULSE_INTEGRAL_BANK_TAG: + hits.addAll(makeIntegralHits(cdata, crate)); + hitClass = BaseRawCalorimeterHit.class; + flags = (1 << LCIOConstants.RCHBIT_TIME); //store timestamp + break; + default: + throw new RuntimeException("Unsupported ECal format - bank tag " + slotBank.getHeader().getTag()); + } } } } @@ -160,7 +181,9 @@ Long id = daqToGeometryId(crate, slot, channel); // Long id = EcalConditions.daqToPhysicalID(crate, slot, channel); - System.out.println("The long id is: " + id); + if (debug) { + System.out.println("The long id is: " + id); + } short[] adcValues = new short[nSamples]; for (int i = 0; i < nSamples; i++) { Copied: java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java (from r1425, java/trunk/evio/src/main/java/org/hps/evio/LCSimTestRunEventBuilder.java) ============================================================================= --- java/trunk/evio/src/main/java/org/hps/evio/LCSimTestRunEventBuilder.java (original) +++ java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java Tue Nov 4 20:49:21 2014 @@ -1,18 +1,7 @@ package org.hps.evio; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; - -//import org.hps.conditions.deprecated.EcalConditions; +import org.hps.readout.ecal.SSPData; import org.hps.readout.ecal.TriggerData; -import org.jlab.coda.jevio.BaseStructure; -import org.jlab.coda.jevio.EvioEvent; -import org.lcsim.event.EventHeader; -import org.lcsim.event.base.BaseLCSimEvent; -import org.lcsim.geometry.Detector; /** * Build LCSim events from EVIO data. @@ -22,154 +11,22 @@ * @version $Id: LCSimTestRunEventBuilder.java,v 1.24 2013/03/01 01:30:25 meeg * Exp $ */ -public class LCSimTestRunEventBuilder implements LCSimEventBuilder { +public class LCSimEngRunEventBuilder extends LCSimTestRunEventBuilder { - // Names of subdetectors. -// private String trackerName; - // Detector conditions object. - private Detector detector; - // Debug flag. - private boolean debug = false; - ECalEvioReader ecalReader = null; - SVTEvioReader svtReader = null; - private int run = 0; //current run number, taken from prestart and end events - private long time = 0; //most recent event time (ns), taken from prestart and end events, and trigger banks (if any) - - public LCSimTestRunEventBuilder() { - ecalReader = new ECalEvioReader(); - svtReader = new SVTEvioReader(); + public LCSimEngRunEventBuilder() { + ecalReader.setTopBankTag(0x25); + ecalReader.setBotBankTag(0x27); + sspCrateBankTag = 0x25; + sspBankTag = 0xe10c; +// ecalReader = new ECalEvioReader(0x25, 0x27); +// svtReader = new SVTEvioReader(); } - @Override - public void setDetectorName(String detectorName) { - // Make a dummy event to setup the conditions system. - EventHeader dummyEvent = new BaseLCSimEvent(0, 0, detectorName); - detector = dummyEvent.getDetector(); -// EcalConditions.loadDaqMap(detector, "Ecal"); + protected TriggerData makeTriggerData(int[] data) { + TriggerData triggerData = new SSPData(data); + time = ((long) triggerData.getTime()) * 4; + return triggerData; } - @Override - public void setDebug(boolean debug) { - this.debug = debug; - ecalReader.setDebug(debug); - } - public void setEcalHitCollectionName(String ecalHitCollectionName) { - ecalReader.setHitCollectionName(ecalHitCollectionName); - } - - @Override - public void readEvioEvent(EvioEvent evioEvent) { - if (EventConstants.isSyncEvent(evioEvent)) { - int[] data = evioEvent.getIntData(); - int seconds = data[0]; - System.out.println("Sync event: time " + seconds + " - " + new Date(((long) seconds) * 1000) + ", event count since last sync " + data[1] + ", event count so far " + data[2] + ", status " + data[3]); - } else if (EventConstants.isPreStartEvent(evioEvent)) { - int[] data = evioEvent.getIntData(); - int seconds = data[0]; - time = ((long) seconds) * 1000000000; - run = data[1]; - System.out.println("Prestart event: time " + seconds + " - " + new Date(((long) seconds) * 1000) + ", run " + run + ", run type " + data[2]); - } else if (EventConstants.isGoEvent(evioEvent)) { - int[] data = evioEvent.getIntData(); - int seconds = data[0]; - time = ((long) seconds) * 1000000000; - System.out.println("Go event: time " + seconds + " - " + new Date(((long) seconds) * 1000) + ", event count so far " + data[2]); - } else if (EventConstants.isPauseEvent(evioEvent)) { - int[] data = evioEvent.getIntData(); - int seconds = data[0]; - time = ((long) seconds) * 1000000000; - System.out.println("Pause event: time " + seconds + " - " + new Date(((long) seconds) * 1000) + ", event count so far " + data[2]); - } else if (EventConstants.isEndEvent(evioEvent)) { - int[] data = evioEvent.getIntData(); - int seconds = data[0]; - time = ((long) seconds) * 1000000000; - run = 0; - System.out.println("End event: time " + seconds + " - " + new Date(((long) seconds) * 1000) + ", event count " + data[2]); - } - } - - @Override - public EventHeader makeLCSimEvent(EvioEvent evioEvent) { - if (!isPhysicsEvent(evioEvent)) { - throw new RuntimeException("Not a physics event: event tag " + evioEvent.getHeader().getTag()); - } - - // Create a new LCSimEvent. - EventHeader lcsimEvent = getEventData(evioEvent); - - // Make RawCalorimeterHit collection, combining top and bottom section of ECal into one list. - try { - ecalReader.makeHits(evioEvent, lcsimEvent); - } catch (Exception e) { - Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "Error making ECal hits", e); - } - - // Make SVT RawTrackerHits - try { - svtReader.makeHits(evioEvent, lcsimEvent); - } catch (Exception e) { - Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "Error making SVT hits", e); - } - - return lcsimEvent; - } - - @Override - public boolean isPhysicsEvent(EvioEvent evioEvent) { - return (evioEvent.getHeader().getTag() == EventConstants.PHYSICS_EVENT_TAG); - } - - private EventHeader getEventData(EvioEvent evioEvent) { - int[] eventID = null; - //array of length 3: {event number, trigger code, readout status} - - List<TriggerData> triggerList = new ArrayList<TriggerData>(); - - if (evioEvent.getChildCount() > 0) { - for (BaseStructure bank : evioEvent.getChildren()) { - if (bank.getHeader().getTag() == EventConstants.EVENTID_BANK_TAG) { - eventID = bank.getIntData(); - } - if (bank.getHeader().getTag() == EventConstants.ECAL_TOP_BANK_TAG || bank.getHeader().getTag() == EventConstants.ECAL_BOTTOM_BANK_TAG) { - if (bank.getChildCount() > 0) { - for (BaseStructure slotBank : bank.getChildren()) { - if (slotBank.getHeader().getTag() == EventConstants.TRIGGER_BANK_TAG) { - TriggerData triggerData = new TriggerData(slotBank.getIntData()); - time = ((long) triggerData.getTime()) * 1000000000; - triggerList.add(triggerData); - } - } - } - } - } - } - - if (eventID == null) { - System.out.println("No event ID bank found"); - eventID = new int[3]; - } else { - if (debug) { - System.out.println("Read EVIO event number " + eventID[0]); - } - if (eventID[1] != 1) { - System.out.println("Trigger code is usually 1; got " + eventID[1]); - } - if (eventID[2] != 0) { - System.out.println("Readout status is usually 0; got " + eventID[2]); - } - } - - if (triggerList.isEmpty()) { - System.out.println("No trigger bank found"); - } else if (triggerList.size() > 1) { - System.out.println("Found multiple trigger banks"); - } - - // Create a new LCSimEvent. - EventHeader lcsimEvent = new BaseLCSimEvent(run, eventID[0], detector.getDetectorName(), time); - - lcsimEvent.put("TriggerBank", triggerList, TriggerData.class, 0); - return lcsimEvent; - } -} +} Modified: java/trunk/evio/src/main/java/org/hps/evio/LCSimTestRunEventBuilder.java ============================================================================= --- java/trunk/evio/src/main/java/org/hps/evio/LCSimTestRunEventBuilder.java (original) +++ java/trunk/evio/src/main/java/org/hps/evio/LCSimTestRunEventBuilder.java Tue Nov 4 20:49:21 2014 @@ -5,8 +5,6 @@ import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; - -//import org.hps.conditions.deprecated.EcalConditions; import org.hps.readout.ecal.TriggerData; import org.jlab.coda.jevio.BaseStructure; import org.jlab.coda.jevio.EvioEvent; @@ -27,16 +25,18 @@ // Names of subdetectors. // private String trackerName; // Detector conditions object. - private Detector detector; + protected Detector detector; // Debug flag. - private boolean debug = false; + protected boolean debug = false; ECalEvioReader ecalReader = null; SVTEvioReader svtReader = null; - private int run = 0; //current run number, taken from prestart and end events - private long time = 0; //most recent event time (ns), taken from prestart and end events, and trigger banks (if any) + protected int run = 0; //current run number, taken from prestart and end events + protected long time = 0; //most recent event time (ns), taken from prestart and end events, and trigger banks (if any) + protected int sspCrateBankTag = 0x1; //bank ID of the crate containing the SSP + protected int sspBankTag = 0xe106; //SSP bank's tag public LCSimTestRunEventBuilder() { - ecalReader = new ECalEvioReader(); + ecalReader = new ECalEvioReader(0x1, 0x2); svtReader = new SVTEvioReader(); } @@ -120,27 +120,16 @@ return (evioEvent.getHeader().getTag() == EventConstants.PHYSICS_EVENT_TAG); } - private EventHeader getEventData(EvioEvent evioEvent) { + protected EventHeader getEventData(EvioEvent evioEvent) { int[] eventID = null; //array of length 3: {event number, trigger code, readout status} - List<TriggerData> triggerList = new ArrayList<TriggerData>(); + List<TriggerData> triggerList = getTriggerData(evioEvent); if (evioEvent.getChildCount() > 0) { for (BaseStructure bank : evioEvent.getChildren()) { if (bank.getHeader().getTag() == EventConstants.EVENTID_BANK_TAG) { eventID = bank.getIntData(); - } - if (bank.getHeader().getTag() == EventConstants.ECAL_TOP_BANK_TAG || bank.getHeader().getTag() == EventConstants.ECAL_BOTTOM_BANK_TAG) { - if (bank.getChildCount() > 0) { - for (BaseStructure slotBank : bank.getChildren()) { - if (slotBank.getHeader().getTag() == EventConstants.TRIGGER_BANK_TAG) { - TriggerData triggerData = new TriggerData(slotBank.getIntData()); - time = ((long) triggerData.getTime()) * 1000000000; - triggerList.add(triggerData); - } - } - } } } } @@ -172,4 +161,30 @@ lcsimEvent.put("TriggerBank", triggerList, TriggerData.class, 0); return lcsimEvent; } -} + + protected List<TriggerData> getTriggerData(EvioEvent evioEvent) { + List<TriggerData> triggerList = new ArrayList<TriggerData>(); + if (evioEvent.getChildCount() > 0) { + for (BaseStructure bank : evioEvent.getChildren()) { + if (bank.getHeader().getTag() == sspCrateBankTag) { + if (bank.getChildCount() > 0) { + for (BaseStructure slotBank : bank.getChildren()) { + if (slotBank.getHeader().getTag() == sspBankTag) { +// TriggerData triggerData = new TriggerData(slotBank.getIntData()); +// time = ((long) triggerData.getTime()) * 1000000000; + triggerList.add(makeTriggerData(slotBank.getIntData())); + } + } + } + } + } + } + return triggerList; + } + + protected TriggerData makeTriggerData(int[] data) { + TriggerData triggerData = new TriggerData(data); + time = ((long) triggerData.getTime()) * 1000000000; + return triggerData; + } +}