Print

Print


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;