Author: [log in to unmask] Date: Sat Feb 28 05:08:19 2015 New Revision: 2218 Log: making new class TriggerConfigEvioReader, moving it out of EventBuilder. Now enabled by default, with a check on run number to ignore runs before EVIO bank format was corrected. Added: java/trunk/evio/src/main/java/org/hps/evio/TriggerConfigEvioReader.java Modified: java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.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 Sat Feb 28 05:08:19 2015 @@ -24,7 +24,9 @@ * @author Jeremy McCormick <[log in to unmask]> */ public class LCSimEngRunEventBuilder extends LCSimTestRunEventBuilder { - + + TriggerConfigEvioReader triggerConfigReader = null; + public LCSimEngRunEventBuilder() { ecalReader.setTopBankTag(0x25); ecalReader.setBotBankTag(0x27); @@ -35,6 +37,8 @@ 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); + + triggerConfigReader = new TriggerConfigEvioReader(); } @Override @@ -57,8 +61,8 @@ // Create a new LCSimEvent. EventHeader lcsimEvent = getEventData(evioEvent); - // Put DAQ Configuration info into lcsimEvent (NAB Feb 5, 2015): - //getDAQConfig(evioEvent,lcsimEvent); + // Put DAQ Configuration info into lcsimEvent + triggerConfigReader.getDAQConfig(evioEvent,lcsimEvent); // Make RawCalorimeterHit collection, combining top and bottom section // of ECal into one list. @@ -78,27 +82,6 @@ return lcsimEvent; } - // NAB Feb 16, 2015: - public void getDAQConfig(EvioEvent evioEvent, EventHeader lcsimEvent) { - List <TriggerConfig> trigconf=new ArrayList<TriggerConfig>(); - for (BaseStructure bank : evioEvent.getChildrenList()) { - if (bank.getChildCount()<=0) continue; - int crate=bank.getHeader().getTag(); - for (BaseStructure subBank : bank.getChildrenList()) { - if (subBank.getHeader().getTag() == TriggerConfig.BANK_TAG) { - //System.err.println("000000000000000000000000 "+crate); - if (subBank.getStringData() == null) continue; // FIXME: Due to Crate 39 EVIO Format Error - //System.err.println("111111111111111111111111 "+crate); - if (trigconf.size()==0) trigconf.add(new TriggerConfig()); - trigconf.get(0).parse(crate,lcsimEvent.getRunNumber(),subBank.getStringData()); -// trigconf.add(new TriggerConfig(lcsimEvent.getRunNumber(),subBank.getStringData())); - } - } - } - if (trigconf.size()>0) { - //trigconf.get(0).printVars(); - lcsimEvent.put("TriggerConfig",trigconf,TriggerConfig.class,0); - }; - } + } Added: java/trunk/evio/src/main/java/org/hps/evio/TriggerConfigEvioReader.java ============================================================================= --- java/trunk/evio/src/main/java/org/hps/evio/TriggerConfigEvioReader.java (added) +++ java/trunk/evio/src/main/java/org/hps/evio/TriggerConfigEvioReader.java Sat Feb 28 05:08:19 2015 @@ -0,0 +1,66 @@ +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.triggerbank.TriggerConfig; +import org.jlab.coda.jevio.BaseStructure; +import org.jlab.coda.jevio.EvioEvent; +import org.lcsim.event.EventHeader; + +/* + * Search for a configuration bank in EvioEvent, and, if found, create an instance of + * TriggerConfig, pass it the string data for parsing, and put it in EventHeader. + * + * + * As of Feb 27, 2015 (run 4043): + * + * The error in string termination in one of the EVIO banks that made it unparseable + * by JEVIO is now fixed. + * + * But the banks are still being written in physics events under their crate's bank. + * This should change soon. + * + * + * @author <[log in to unmask]> + */ +public class TriggerConfigEvioReader { + + int nDAQConfigErrors = 0; + + public void getDAQConfig(EvioEvent evioEvent, EventHeader lcsimEvent) { + if (lcsimEvent.getRunNumber() < 4043) { + if (nDAQConfigErrors++ < 2) { + Logger.getLogger(this.getClass().getName()).log(Level.WARNING, + "EVIO DAQ CONFIG format not good for runs before #4043. " + + "Ignoring it, and only printing this twice."); + } + return; + } + List<TriggerConfig> trigconf = new ArrayList<TriggerConfig>(); + for (BaseStructure bank : evioEvent.getChildrenList()) { + if (bank.getChildCount() <= 0) + continue; + int crate = bank.getHeader().getTag(); + for (BaseStructure subBank : bank.getChildrenList()) { + if (subBank.getHeader().getTag() == TriggerConfig.BANK_TAG) { + if (subBank.getStringData() == null) { + Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, + "JEVIO can't parse DAQ Config bank. Event Number " + + evioEvent.getEventNumber()); + return; + } + if (trigconf.size() == 0) + trigconf.add(new TriggerConfig()); + trigconf.get(0).parse(crate,lcsimEvent.getRunNumber(),subBank.getStringData()); + } + } + } + if (trigconf.size() > 0) { + lcsimEvent.put("TriggerConfig",trigconf,TriggerConfig.class,0); + }; + } + +}