Print

Print


Author: [log in to unmask]
Date: Mon Mar 30 17:30:44 2015
New Revision: 2629

Log:
add TDC-DSC mapping

Modified:
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/triggerbank/TDCData.java
    java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/triggerbank/TDCData.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/triggerbank/TDCData.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/triggerbank/TDCData.java	Mon Mar 30 17:30:44 2015
@@ -2,6 +2,9 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import org.hps.conditions.database.DatabaseConditionsManager;
+import org.hps.conditions.ecal.EcalChannel;
+import org.hps.conditions.ecal.EcalConditions;
 import org.lcsim.event.GenericObject;
 
 /**
@@ -43,34 +46,90 @@
 
     public class TDCHit {
 
-        private final int slot, edge, channel, time;
+        private final int tdcSlot, edge, tdcChannel, time;
+        private int dscCrate, dscSlot, dscChannel;
+        private int fadcCrate;
+        private boolean isECal;
+        private int x = 0, y = 0;
 
         public TDCHit(int data) {
-            slot = (data >> 27) & 0x1F; // bits 31:27
+            tdcSlot = (data >> 27) & 0x1F; // bits 31:27
             edge = (data >> 26) & 1; // bits 26:26
-            channel = (data >> 19) & 0x7F; // bits 25:19
+            tdcChannel = (data >> 19) & 0x7F; // bits 25:19
             time = data & 0x7FFFF; // bits 18:00
+            tdc2dsc();
         }
 
-        public int getSlot() {
-            return slot;
+        public int getTdcSlot() {
+            return tdcSlot;
         }
 
         public int getEdge() {
             return edge;
         }
 
-        public int getChannel() {
-            return channel;
+        public int getTdcChannel() {
+            return tdcChannel;
         }
 
         public int getTime() {
             return time;
         }
 
+        public int getDscCrate() {
+            return dscCrate;
+        }
+
+        public int getDscSlot() {
+            return dscSlot;
+        }
+
+        public int getDscChannel() {
+            return dscChannel;
+        }
+
+        public int getFadcCrate() {
+            return fadcCrate;
+        }
+
+        public boolean isECal() {
+            return isECal;
+        }
+
+        public int getX() {
+            return x;
+        }
+
+        public int getY() {
+            return y;
+        }
+
+        private void tdc2dsc() {
+            if (tdcSlot < 10 || tdcSlot > 13 || tdcChannel < 0 || tdcChannel > 127) {
+                throw new RuntimeException("Invalid TDC channel: " + tdcSlot + " " + tdcChannel);
+            }
+            int tdcSlot0 = 10;
+            int dscSlot0 = tdcSlot < 12 ? 3 : 6;
+            dscCrate = tdcChannel < 64 ? 46 : 58;
+            fadcCrate = tdcChannel < 64 ? 2 : 1;
+            dscSlot = (tdcChannel % 64) / 16 + 4 * (tdcSlot - tdcSlot0) + dscSlot0;
+            dscChannel = tdcChannel % 16;
+
+            EcalConditions ecalConditions = DatabaseConditionsManager.getInstance().getEcalConditions();
+            EcalChannel.DaqId daqId = new EcalChannel.DaqId(new int[]{fadcCrate, dscSlot, dscChannel}); // DSC slot/channel mapping mirrors FADC mapping
+            EcalChannel ecalChannel = ecalConditions.getChannelCollection().findChannel(daqId);
+            if (ecalChannel == null) {
+                isECal = false;
+            } else {
+                isECal = true;
+                x = ecalChannel.getX();
+                y = ecalChannel.getY();
+            }
+        }
+
         @Override
         public String toString() {
-            return String.format("slot %d, edge %d, ch %d, time %d", slot, edge, channel, time);
+            return String.format("slot %d, edge %d, ch %d, time %d; DSC crate %d, slot %d, ch %d, isECal %b, ix %d, iy %d", tdcSlot, edge, tdcChannel, time, dscCrate, dscSlot, dscChannel, isECal, x, y);
         }
     }
 }

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	Mon Mar 30 17:30:44 2015
@@ -51,7 +51,6 @@
         intBanks = new ArrayList<IntBankDefinition>();
         intBanks.add(new IntBankDefinition(SSPData.class, new int[]{sspCrateBankTag, sspBankTag}));
         intBanks.add(new IntBankDefinition(TIData.class, new int[]{sspCrateBankTag, 0xe10a}));
-        intBanks.add(new IntBankDefinition(TDCData.class, new int[]{0x2d, 0xe107}));
         intBanks.add(new IntBankDefinition(TDCData.class, new int[]{0x3a, 0xe107}));
         // ecalReader = new ECalEvioReader(0x25, 0x27);
         triggerConfigReader = new TriggerConfigEvioReader();