Author: [log in to unmask] Date: Tue Nov 4 20:47:24 2014 New Revision: 1430 Log: extend TriggerData with Andrea's reader for the new SSP bank format Added: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/SSPData.java - copied, changed from r1425, java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TriggerData.java Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TriggerData.java Copied: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/SSPData.java (from r1425, java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TriggerData.java) ============================================================================= --- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TriggerData.java (original) +++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/SSPData.java Tue Nov 4 20:47:24 2014 @@ -2,73 +2,160 @@ import org.lcsim.event.GenericObject; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + /** * * @author Sho Uemura <[log in to unmask]> + * @author Andrea Celentano <[log in to unmask]> * @version $Id: TriggerData.java,v 1.3 2012/08/03 23:14:39 meeg Exp $ */ -public class TriggerData implements GenericObject { +public class SSPData extends TriggerData { - public static final int OR_TRIG = 3; - public static final int TOP_TRIG = 4; - public static final int BOT_TRIG = 5; - public static final int AND_TRIG = 6; - public static final int TIME = 7; - public static final int TRIG_BANK_SIZE = 8; +// public static final int OR_TRIG = 3; +// public static final int TOP_TRIG = 4; +// public static final int BOT_TRIG = 5; +// public static final int AND_TRIG = 6; +// public static final int TIME = 7; +// public static final int TRIG_BANK_SIZE = 8; + //Here goes the 5-bit identifiers for the word type + public static final int TRIG_HEADER = 0x12; + public static final int TRIG_TIME = 0x13; + public static final int TRIG_TYPE = 0x15; + public static final int CLUSTER_TYPE = 0x14; + public static final String TRIG_COLLECTION = "TriggerBank"; private int[] bank; - public TriggerData(int[] bank) { - this.bank = bank; + private long trigTime; + private int eventNum; + + private int trigType; + private int trigTypeData; + private int trigTypeTime; + + private int nCluster, nClusterTop, nClusterBottom; + + private List<Integer> clusterX, clusterY, clusterE, clusterT, clusterNhits; + + public SSPData(int[] bank) { + super(bank); + + clusterX = new ArrayList<Integer>(); + clusterY = new ArrayList<Integer>(); + clusterE = new ArrayList<Integer>(); + clusterT = new ArrayList<Integer>(); + clusterNhits = new ArrayList<Integer>(); + + trigTime = 0; + trigType = -1; + trigTypeData = 0; + + nCluster = nClusterTop = nClusterBottom = 0; + + this.bank = Arrays.copyOf(bank, bank.length); + this.decodeTriggerBank(); + } - public int getTime() { - return getIntVal(TIME); + private void decodeTriggerBank() { + /*A. Celentano: decode here the trigger bank*/ + /*We do not need to handle block header, block trayler since these are disentagled in the secondary CODA readout list*/ + int this_word; + int this_clusterX, this_clusterY, this_clusterE, this_clusterT, this_clusterNhits; + + for (int ii = 0; ii < bank.length; ii++) { + this_word = bank[ii]; + + //event header + if (((this_word >> 27) & (0x1f)) == TRIG_HEADER) { + eventNum = this_word & 0x7FFFFFF; + } //trigger time + else if (((this_word >> 27) & (0x1f)) == TRIG_TIME) { + trigTime = (bank[ii + 1] << 24) | (this_word & 0xffffff); + } //trigger type + else if (((this_word >> 27) & (0x1f)) == TRIG_TYPE) { + trigType = (this_word >> 23) & 0xf; //this is the trigbit, from 0 to 7 + trigTypeData = (this_word >> 16) & 0x7f; + trigTypeTime = (this_word >> 16) & 0x3ff; + } //cluster + else if (((this_word >> 27) & (0x1f)) == CLUSTER_TYPE) { + this_clusterNhits = (this_word >> 23) & 0xf; + clusterNhits.add(this_clusterNhits); + + this_clusterE = (this_word >> 10) & 0x1fff; + clusterE.add(this_clusterE); + + this_clusterY = (this_word >> 6) & 0xf; + clusterY.add(this_clusterY); + if (this_clusterY > 0) { + nClusterTop++; + } else if (this_clusterY < 0) { + nClusterBottom++; + } + + this_clusterX = (this_word) & 0x3f; + clusterX.add(this_clusterX); + + this_clusterT = (bank[ii + 1]) & 0x3ff; + clusterT.add(this_clusterT); + + nCluster++; + } + + } } - public int getOrTrig() { - return getIntVal(OR_TRIG); + @Override + public long getTime() { + return trigTime; } - public int getTopTrig() { - return getIntVal(TOP_TRIG); - } - - public int getBotTrig() { - return getIntVal(BOT_TRIG); - } - - public int getAndTrig() { - return getIntVal(AND_TRIG); - } - +// public int getOrTrig() { +// return 0; +// } +// +// public int getTopTrig() { +// return 0; +// } +// +// public int getBotTrig() { +// return 0; +// } +// +// public int getAndTrig() { +// return 0; +// } public int[] getBank() { return bank; } - public static int getTime(GenericObject object) { - return object.getIntVal(TIME); + public static long getTime(GenericObject object) { + return ((TriggerData) object).getTime(); } public static int getOrTrig(GenericObject object) { - return object.getIntVal(OR_TRIG); + return ((TriggerData) object).getOrTrig(); } public static int getTopTrig(GenericObject object) { - return object.getIntVal(TOP_TRIG); + return ((TriggerData) object).getTopTrig(); } public static int getBotTrig(GenericObject object) { - return object.getIntVal(BOT_TRIG); + return ((TriggerData) object).getBotTrig(); } public static int getAndTrig(GenericObject object) { - return object.getIntVal(AND_TRIG); + return ((TriggerData) object).getAndTrig(); } public static int[] getBank(GenericObject object) { - int[] bank = new int[8]; - for (int i = 0; i < 8; i++) { + int N = ((SSPData) object).bank.length; + int[] bank = new int[N]; + for (int i = 0; i < N; i++) { bank[i] = object.getIntVal(i); } return bank; @@ -76,7 +163,7 @@ @Override public int getNInt() { - return TRIG_BANK_SIZE; + return bank.length; } @Override @@ -106,6 +193,6 @@ @Override public boolean isFixedSize() { - return true; + return false; } } Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TriggerData.java ============================================================================= --- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TriggerData.java (original) +++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TriggerData.java Tue Nov 4 20:47:24 2014 @@ -22,7 +22,7 @@ this.bank = bank; } - public int getTime() { + public long getTime() { return getIntVal(TIME); } @@ -46,7 +46,7 @@ return bank; } - public static int getTime(GenericObject object) { + public static long getTime(GenericObject object) { return object.getIntVal(TIME); }