Author: [log in to unmask] Date: Thu Jan 22 15:26:24 2015 New Revision: 1970 Log: use new trigger bank classes in event builder Modified: java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java java/trunk/evio/src/main/java/org/hps/evio/LCSimTestRunEventBuilder.java Modified: java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java ============================================================================= --- java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java (original) +++ java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java Thu Jan 22 15:26:24 2015 @@ -1,10 +1,12 @@ package org.hps.evio; +import java.util.ArrayList; +import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; - -import org.hps.readout.ecal.SSPData; -import org.hps.readout.ecal.TriggerData; +import org.hps.readout.ecal.triggerbank.SSPData; +import org.hps.readout.ecal.triggerbank.TIData; +import org.hps.readout.ecal.triggerbank.AbstractIntData; import org.hps.record.evio.EvioEventUtilities; import org.jlab.coda.jevio.EvioEvent; import org.lcsim.event.EventHeader; @@ -17,48 +19,54 @@ */ public class LCSimEngRunEventBuilder extends LCSimTestRunEventBuilder { - public LCSimEngRunEventBuilder() { - ecalReader.setTopBankTag(0x25); - ecalReader.setBotBankTag(0x27); - sspCrateBankTag = 0x2E; //A.C. modification after Sergey's confirmation - sspBankTag = 0xe10c; - // ecalReader = new ECalEvioReader(0x25, 0x27); - // svtReader = new SVTEvioReader(); - } + public LCSimEngRunEventBuilder() { + ecalReader.setTopBankTag(0x25); + ecalReader.setBotBankTag(0x27); + sspCrateBankTag = 0x2E; //A.C. modification after Sergey's confirmation + sspBankTag = 0xe10c; + intBanks = new ArrayList<IntBankDefinition>(); + intBanks.add(new IntBankDefinition(SSPData.class, new int[]{sspCrateBankTag, sspBankTag})); + intBanks.add(new IntBankDefinition(TIData.class, new int[]{sspCrateBankTag, 0xe10a})); + // ecalReader = new ECalEvioReader(0x25, 0x27); + // svtReader = new SVTEvioReader(); + } - protected TriggerData makeTriggerData(int[] data) { - TriggerData triggerData = new SSPData(data); - time = ((long) triggerData.getTime()) * 4; - return triggerData; - } + @Override + protected long getTime(List<AbstractIntData> triggerList) { + for (AbstractIntData data : triggerList) { + if (data instanceof TIData) { + TIData tiData = (TIData) data; + return tiData.getTime() * 4; + } + } + return 0; + } - @Override - public EventHeader makeLCSimEvent(EvioEvent evioEvent) { - if (!EvioEventUtilities.isPhysicsEvent(evioEvent)) { - throw new RuntimeException("Not a physics event: event tag " + evioEvent.getHeader().getTag()); - } + @Override + public EventHeader makeLCSimEvent(EvioEvent evioEvent) { + if (!EvioEventUtilities.isPhysicsEvent(evioEvent)) { + throw new RuntimeException("Not a physics event: event tag " + evioEvent.getHeader().getTag()); + } - // Create a new LCSimEvent. - EventHeader lcsimEvent = getEventData(evioEvent); + // 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 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); + } - // Commented out for now while SVT is not implemented. --JM - // 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; - } - + // Commented out for now while SVT is not implemented. --JM + // 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; + } } 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 Thu Jan 22 15:26:24 2015 @@ -5,8 +5,8 @@ import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; - -import org.hps.readout.ecal.TriggerData; +import org.hps.readout.ecal.triggerbank.AbstractIntData; +import org.hps.readout.ecal.triggerbank.TestRunTriggerData; import org.hps.record.LCSimEventBuilder; import org.hps.record.evio.EvioEventConstants; import org.hps.record.evio.EvioEventUtilities; @@ -33,10 +33,13 @@ protected int sspCrateBankTag = 0x1; //bank ID of the crate containing the SSP protected int sspBankTag = 0xe106; //SSP bank's tag protected static Logger logger = LogUtil.create(LCSimTestRunEventBuilder.class); + protected List<IntBankDefinition> intBanks = null; public LCSimTestRunEventBuilder() { ecalReader = new ECalEvioReader(0x1, 0x2); svtReader = new TestRunSvtEvioReader(); + intBanks = new ArrayList<IntBankDefinition>(); + intBanks.add(new IntBankDefinition(TestRunTriggerData.class, new int[]{sspCrateBankTag, sspBankTag})); logger.setLevel(Level.FINE); } @@ -84,7 +87,7 @@ if (!EvioEventUtilities.isPhysicsEvent(evioEvent)) { throw new RuntimeException("Not a physics event: event tag " + evioEvent.getHeader().getTag()); } - + // Create a new LCSimEvent. EventHeader lcsimEvent = getEventData(evioEvent); @@ -109,16 +112,16 @@ int[] eventID = null; //array of length 3: {event number, trigger code, readout status} - List<TriggerData> triggerList = getTriggerData(evioEvent); + List<AbstractIntData> triggerList = getTriggerData(evioEvent); if (evioEvent.getChildCount() > 0) { for (BaseStructure bank : evioEvent.getChildren()) { if (bank.getHeader().getTag() == EvioEventConstants.EVENTID_BANK_TAG) { eventID = bank.getIntData(); - } - } - } - + } + } + } + if (eventID == null) { logger.warning("No event ID bank found"); eventID = new int[3]; @@ -132,51 +135,84 @@ } } - if (triggerList.isEmpty()) { - logger.finest("No trigger bank found"); - } else if (triggerList.size() > 1) { - logger.finest("Found multiple trigger banks"); - } + time = getTime(triggerList); // Create a new LCSimEvent. EventHeader lcsimEvent = new BaseLCSimEvent( - ConditionsManager.defaultInstance().getRun(), - eventID[0], - ConditionsManager.defaultInstance().getDetector(), + ConditionsManager.defaultInstance().getRun(), + eventID[0], + ConditionsManager.defaultInstance().getDetector(), time); - lcsimEvent.put("TriggerBank", triggerList, TriggerData.class, 0); + lcsimEvent.put("TriggerBank", triggerList, AbstractIntData.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())); - } - } - } + protected long getTime(List<AbstractIntData> triggerList) { + for (AbstractIntData data : triggerList) { + if (data instanceof TestRunTriggerData) { + return (((TestRunTriggerData) data).getTime()) * 1000000000L; + } + } + return 0; + } + + protected List<AbstractIntData> getTriggerData(EvioEvent evioEvent) { + List<AbstractIntData> triggerList = new ArrayList<AbstractIntData>(); + + for (IntBankDefinition def : intBanks) { + BaseStructure bank = def.findBank(evioEvent); + if (bank != null) { //returns null if no banks found + try { + AbstractIntData data = (AbstractIntData) def.dataClass.getConstructor(int[].class).newInstance(bank.getIntData()); + triggerList.add(data); + } catch (Exception ex) { + Logger.getLogger(LCSimTestRunEventBuilder.class.getName()).log(Level.SEVERE, null, ex); } + } else { + logger.finest("No trigger bank found of type " + def.dataClass.getSimpleName()); } } return triggerList; } - protected TriggerData makeTriggerData(int[] data) { - TriggerData triggerData = new TriggerData(data); - time = ((long) triggerData.getTime()) * 1000000000; - return triggerData; - } - +// protected TriggerData makeTriggerData(int[] data) { +// TriggerData triggerData = new TriggerData(data); +// time = ((long) triggerData.getTime()) * 1000000000; +// return triggerData; +// } @Override public void conditionsChanged(ConditionsEvent conditionsEvent) { ecalReader.initialize(); } + + protected class IntBankDefinition { + + int[] bankTags; + Class<? extends AbstractIntData> dataClass; + + public IntBankDefinition(Class dataClass, int[] bankTags) { + this.bankTags = bankTags; + this.dataClass = dataClass; + } + + public BaseStructure findBank(EvioEvent evioEvent) { + BaseStructure currentBank = evioEvent; + searchLoop: + for (int bankTag : bankTags) { + if (currentBank.getChildCount() > 0) { + for (BaseStructure childBank : currentBank.getChildren()) { + if (childBank.getHeader().getTag() == bankTag) { //found a bank with the right tag; step inside this bank and conitnue searching + currentBank = childBank; + continue searchLoop; + } + } + return null; //didn't find a bank with the right tag, give up + } else { //bank has no children, give up + return null; + } + } + return currentBank; // matched every tag, so this is the bank we want + } + } }