Author: celentan Date: Tue Dec 9 05:25:12 2014 New Revision: 1660 Log: Update the Evio Reader to handle FADC mode 7 Modified: java/trunk/evio/src/main/java/org/hps/evio/ECalEvioReader.java java/trunk/evio/src/main/java/org/hps/evio/EventConstants.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 Dec 9 05:25:12 2014 @@ -14,6 +14,7 @@ import org.hps.conditions.ecal.EcalChannel.GeometryId; import org.hps.conditions.ecal.EcalConditions; import org.hps.recon.ecal.FADCGenericHit; +import org.hps.recon.ecal.HPSRawCalorimeterHit; import org.jlab.coda.jevio.BaseStructure; import org.jlab.coda.jevio.BaseStructureHeader; import org.jlab.coda.jevio.CompositeData; @@ -131,8 +132,13 @@ flags = 0; break; case EventConstants.ECAL_PULSE_INTEGRAL_BANK_TAG: - hits.addAll(makeIntegralHits(cdata, crate)); - hitClass = BaseRawCalorimeterHit.class; + hits.addAll(makeIntegralHitsMode3(cdata, crate)); + hitClass = HPSRawCalorimeterHit.class; + flags = (1 << LCIOConstants.RCHBIT_TIME); //store timestamp + break; + case EventConstants.ECAL_PULSE_INTEGRAL_HIGHRESTDC_BANK_TAG: + hits.addAll(makeIntegralHitsMode7(cdata, crate)); + hitClass = HPSRawCalorimeterHit.class; flags = (1 << LCIOConstants.RCHBIT_TIME); //store timestamp break; default: @@ -277,8 +283,8 @@ return hits; } - private List<BassRawCalorimeterHit> makeIntegralHits(CompositeData cdata, int crate) { - List<BassRawCalorimeterHit> hits = new ArrayList<BassRawCalorimeterHit>(); + private List<HPSRawCalorimeterHit> makeIntegralHitsMode3(CompositeData cdata, int crate) { + List<HPSRawCalorimeterHit> hits = new ArrayList<HPSRawCalorimeterHit>(); if (debug) { int n = cdata.getNValues().size(); for (int i = 0; i < n; i++) { @@ -315,7 +321,7 @@ int[] data = {pulseIntegral, pulseTime}; processUnrecognizedChannel(new FADCGenericHit(EventConstants.ECAL_PULSE_INTEGRAL_MODE, crate, slot, channel, data)); } else { - hits.add(new BaseRawCalorimeterHit(id, pulseIntegral, pulseTime)); + hits.add(new HPSRawCalorimeterHit(id, pulseIntegral,pulseTime,0,(short)0,(short)0,EventConstants.ECAL_PULSE_INTEGRAL_MODE)); } } } @@ -323,6 +329,60 @@ return hits; } + + + private List<HPSRawCalorimeterHit> makeIntegralHitsMode7(CompositeData cdata, int crate) { + List<HPSRawCalorimeterHit> hits = new ArrayList<HPSRawCalorimeterHit>(); + if (debug) { + int n = cdata.getNValues().size(); + for (int i = 0; i < n; i++) { + System.out.println("cdata.N[" + i + "]=" + cdata.getNValues().get(i)); + } + int ni = cdata.getItems().size(); + for (int i = 0; i < ni; i++) { + System.out.println("cdata.type[" + i + "]=" + cdata.getTypes().get(i)); + } + } + while (cdata.index() + 1 < cdata.getItems().size()) { //the +1 is a hack because sometimes an extra byte gets read (padding) + short slot = cdata.getByte(); + int trigger = cdata.getInt(); + long timestamp = cdata.getLong(); + int nchannels = cdata.getNValue(); + if (debug) { + System.out.println("slot#=" + slot + "; trigger=" + trigger + "; timestamp=" + timestamp + "; nchannels=" + nchannels); + } + for (int j = 0; j < nchannels; j++) { + short channel = cdata.getByte(); + int npulses = cdata.getNValue(); + if (debug) { + System.out.println(" channel=" + channel + "; npulses=" + npulses); + } + Long id = daqToGeometryId(crate, slot, channel); + + for (int k = 0; k < npulses; k++) { + short pulseTime = cdata.getShort(); + int pulseIntegral = cdata.getInt(); + short amplLow = cdata.getShort(); + short amplHigh = cdata.getShort(); + if (debug) { + System.out.println(" pulseTime=" + pulseTime + "; pulseIntegral=" + pulseIntegral); + } + if (id == null) { + int[] data = {pulseIntegral, pulseTime}; + processUnrecognizedChannel(new FADCGenericHit(EventConstants.ECAL_PULSE_INTEGRAL_HIGHRESTDC_MODE, crate, slot, channel, data)); + } else { + hits.add(new HPSRawCalorimeterHit(id, pulseIntegral,pulseTime,0,amplLow,amplHigh,EventConstants.ECAL_PULSE_INTEGRAL_HIGHRESTDC_MODE)); + } + } + } + } + return hits; + } + + + + + private void processUnrecognizedChannel(FADCGenericHit hit) { genericHits.add(hit); Modified: java/trunk/evio/src/main/java/org/hps/evio/EventConstants.java ============================================================================= --- java/trunk/evio/src/main/java/org/hps/evio/EventConstants.java (original) +++ java/trunk/evio/src/main/java/org/hps/evio/EventConstants.java Tue Dec 9 05:25:12 2014 @@ -18,25 +18,33 @@ public static final int TRIGGER_BANK_NUMBER = 1; public static final int ECAL_WINDOW_MODE = 1; public static final int ECAL_PULSE_MODE = 2; - public static final int ECAL_PULSE_INTEGRAL_MODE = 3; + public static final int ECAL_PULSE_INTEGRAL_MODE = 3; //FADC mode 3 + public static final int ECAL_PULSE_INTEGRAL_HIGHRESTDC_MODE = 4; //FADC mode 7 + - // The composite data format for window ecal data. + // The composite data format for window ecal data. MODE 1 public static final String ECAL_WINDOW_FORMAT = "c,i,l,N(c,Ns)"; // The composite data format for pulse ecal data. public static final String ECAL_PULSE_FORMAT = "c,i,l,N(c,N(c,Ns))"; - // The composite data format for pulse integral ecal data. + // The composite data format for pulse integral ecal data. MODE 3 public static final String ECAL_PULSE_INTEGRAL_FORMAT = "c,i,l,N(c,N(s,i))"; + + // The composite data format for pulse integral ecal data. MODE 7 + public static final String ECAL_PULSE_INTEGRAL_HIGHRESTDC_FORMAT = "c,i,l,N(c,N(s,i,s,s))"; // The tag for ECal window data. public static final int ECAL_WINDOW_BANK_TAG = 0xe101; // The tag for ECal pulse data. - public static final int ECAL_PULSE_BANK_TAG = 0xe102; + public static final int ECAL_PULSE_BANK_TAG = 0xe10F; - // The tag for ECal pulse integral data. + // The tag for ECal pulse integral data mode 3 public static final int ECAL_PULSE_INTEGRAL_BANK_TAG = 0xe103; + + // The tag for ECal pulse integral data mode 7 + public static final int ECAL_PULSE_INTEGRAL_HIGHRESTDC_BANK_TAG = 0xe102; // The tag for trigger data. public static final int TRIGGER_BANK_TAG = 0xe106;