Author: [log in to unmask] Date: Fri Nov 7 20:52:35 2014 New Revision: 1460 Log: add GenericObject conversion for extra FADC channels Added: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/FADCGenericHit.java Modified: java/trunk/evio/src/main/java/org/hps/evio/ECalEvioReader.java Added: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/FADCGenericHit.java ============================================================================= --- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/FADCGenericHit.java (added) +++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/FADCGenericHit.java Fri Nov 7 20:52:35 2014 @@ -0,0 +1,118 @@ +package org.hps.recon.ecal; + +import org.lcsim.event.GenericObject; + +/** + * GenericObject to store hit information for FADC channels not corresponding to + * ECal crystals. Intended for scintillator paddles and other hardware plugged + * into unused FADC channels. + * + * @author Sho Uemura <[log in to unmask]> + * @version $Id: $ + */ +public class FADCGenericHit implements GenericObject { + + private final int readoutMode; + private final int crate; + private final int slot; + private final int channel; + private final int[] data; + + public FADCGenericHit(int readoutMode, int crate, int slot, int channel, int[] data) { + this.readoutMode = readoutMode; + this.crate = crate; + this.slot = slot; + this.channel = channel; + this.data = data; + } + + @Override + public int getNInt() { + return 4 + data.length; + } + + @Override + public int getNFloat() { + return 0; + } + + @Override + public int getNDouble() { + return 0; + } + + @Override + public int getIntVal(int i) { + switch (i) { + case 0: + return readoutMode; + case 1: + return crate; + case 2: + return slot; + case 3: + return channel; + default: + return data[i-4]; + } + } + + @Override + public float getFloatVal(int i) { + throw new ArrayIndexOutOfBoundsException(); + } + + @Override + public double getDoubleVal(int i) { + throw new ArrayIndexOutOfBoundsException(); + } + + @Override + public boolean isFixedSize() { + return true; + } + + public int getReadoutMode() { + return readoutMode; + } + + public int getCrate() { + return crate; + } + + public int getSlot() { + return slot; + } + + public int getChannel() { + return channel; + } + + public int[] getData() { + return data; + } + + public static int getReadoutMode(GenericObject object) { + return object.getIntVal(0); + } + + public static int getCrate(GenericObject object) { + return object.getIntVal(1); + } + + public static int getSlot(GenericObject object) { + return object.getIntVal(2); + } + + public static int getChannel(GenericObject object) { + return object.getIntVal(3); + } + + public static int[] getData(GenericObject object) { + int[] data = new int[object.getNInt()-4]; + for (int i=0;i<data.length;i++) { + data[i] = object.getIntVal(i+4); + } + return data; + } +} 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 Fri Nov 7 20:52:35 2014 @@ -2,23 +2,23 @@ import java.util.ArrayList; import java.util.List; - import org.hps.conditions.DatabaseConditionsManager; import org.hps.conditions.TableConstants; import org.hps.conditions.ecal.EcalChannel; import org.hps.conditions.ecal.EcalChannel.DaqId; import org.hps.conditions.ecal.EcalChannel.GeometryId; import org.hps.conditions.ecal.EcalConditions; -import org.lcsim.conditions.ConditionsManager; -import org.lcsim.detector.identifier.IIdentifierHelper; -import org.lcsim.detector.identifier.Identifier; -//import org.hps.conditions.deprecated.EcalConditions; +import org.hps.recon.ecal.FADCGenericHit; import org.jlab.coda.jevio.BaseStructure; import org.jlab.coda.jevio.BaseStructureHeader; import org.jlab.coda.jevio.CompositeData; import org.jlab.coda.jevio.EvioEvent; import org.jlab.coda.jevio.EvioException; +import org.lcsim.conditions.ConditionsManager; +import org.lcsim.detector.identifier.IIdentifierHelper; +import org.lcsim.detector.identifier.Identifier; import org.lcsim.event.EventHeader; +import org.lcsim.event.GenericObject; import org.lcsim.event.RawTrackerHit; import org.lcsim.event.SimTrackerHit; import org.lcsim.event.base.BaseRawCalorimeterHit; @@ -43,6 +43,9 @@ // private Detector detector; private Subdetector subDetector; + private static final String genericHitCollectionName = "FADCGenericHits"; + private List<FADCGenericHit> genericHits; + private static EcalConditions ecalConditions = null; private static IIdentifierHelper helper = null; @@ -70,6 +73,7 @@ public boolean makeHits(EvioEvent event, EventHeader lcsimEvent) { boolean foundHits = false; List<Object> hits = new ArrayList<Object>(); + genericHits = new ArrayList<FADCGenericHit>(); hitClass = Object.class; int flags = 0; for (BaseStructure bank : event.getChildren()) { @@ -81,7 +85,7 @@ } else if (crateBankTag == botBankTag) { crate = 2; } - if (crateBankTag == topBankTag||crateBankTag == botBankTag) { + if (crateBankTag == topBankTag || crateBankTag == botBankTag) { foundHits = true; if (bank.getChildCount() > 0) { if (debug) { @@ -135,6 +139,7 @@ } // String readoutName = ; lcsimEvent.put(hitCollectionName, hits, hitClass, flags, readoutName); + lcsimEvent.put(genericHitCollectionName, genericHits, FADCGenericHit.class, 0); // for (Object hit : hits) { // System.out.println(((RawTrackerHit) hit).getIDDecoder().getIDDescription().toString()); // } @@ -182,6 +187,11 @@ } if (id == null) { System.out.printf("Crate %d, slot %d, channel %d not found in map\n", crate, slot, channel); + int[] data = new int[adcValues.length]; + for (int i = 0; i < adcValues.length; i++) { + data[i] = adcValues[i]; + } + genericHits.add(new FADCGenericHit(EventConstants.ECAL_WINDOW_MODE, crate, slot, channel, data)); } else { hits.add(new BaseRawTrackerHit( 0, @@ -245,6 +255,11 @@ } if (id == null) { System.out.printf("Crate %d, slot %d, channel %d not found in map\n", crate, slot, channel); + int[] data = new int[adcValues.length]; + for (int i = 0; i < adcValues.length; i++) { + data[i] = adcValues[i]; + } + genericHits.add(new FADCGenericHit(EventConstants.ECAL_PULSE_MODE, crate, slot, channel, data)); } else { hits.add(new BaseRawTrackerHit(pulseNum, id, adcValues, new ArrayList<SimTrackerHit>(), subDetector.getDetectorElement().findDetectorElement(new Identifier(id)).get(0))); } @@ -290,6 +305,8 @@ } if (id == null) { System.out.printf("Crate %d, slot %d, channel %d not found in map\n", crate, slot, channel); + int[] data = {pulseIntegral, pulseTime}; + genericHits.add(new FADCGenericHit(EventConstants.ECAL_PULSE_INTEGRAL_MODE, crate, slot, channel, data)); } else { hits.add(new BaseRawCalorimeterHit(id, pulseIntegral, pulseTime)); } @@ -298,10 +315,10 @@ } return hits; } - + void initialize() { subDetector = DatabaseConditionsManager.getInstance().getDetectorObject().getSubdetector(subdetectorName); - + // ECAL combined conditions object. ecalConditions = ConditionsManager.defaultInstance() .getCachedConditions(EcalConditions.class, TableConstants.ECAL_CONDITIONS).getCachedData();