00001 #include <iostream>
00002 #include <fstream>
00003 #include "TrigEvent/TrigEACC.h"
00004 using namespace std;
00005
00006 TrigEACC::TrigEACC(const char* name)
00007 {
00008 m_name = name;
00009 }
00010
00011 TrigEACC::~TrigEACC() {
00012 }
00013
00014 void TrigEACC::initialize(){
00015
00016 for(uint32_t i = 0; i < 11; i++)
00017 for(uint32_t j = 0; j < 32; j++)
00018 for(uint32_t k = 0; k < 32; k++) {
00019 if(j < 30) TC[i][j][k] = 0;
00020 if(i == 0) { TC_E[j][k] = 0; TC_W[j][k] = 0; }
00021 if(i == 0 && j < 16) { midCondi[j] = 0; emcTrigCondi[j][k] = 0; }
00022 if(i == 0 && j < 12) { E_blk[j] = 0; T_blk[j] = 0; }
00023 if(i == 0 && j < 2) { E_blkE[j] = 0; T_blkE[j] = 0; E_blkW[j] = 0; T_blkW[j] = 0; }
00024 }
00025 E_B_Etot = 0;
00026 T_B_Etot = 0;
00027 E_E_Etot = 0;
00028 T_E_Etot = 0;
00029 E_blkAll = 0;
00030 T_blkAll = 0;
00031 E_eastHalf = 0;
00032 T_eastHalf = 0;
00033 E_westHalf = 0;
00034 T_westHalf = 0;
00035 E_eastEndHalf = 0;
00036 T_eastEndHalf = 0;
00037 E_westEndHalf = 0;
00038 T_westEndHalf = 0;
00039 }
00040
00041 void TrigEACC::setEACCTrigData( uint32_t boardId, uint32_t window, uint32_t datasize, const uint32_t* data) {
00042 if(boardId != 0xd7) std::cerr << "ERROR: You set the wrong board data to TrigEACC!!!" << std::endl;
00043
00044 m_window = window;
00045
00046 uint32_t charge_mask = 0xFFFF;
00047 uint32_t time_mask = 0xFF0000;
00048 for(uint32_t i = 0; i < datasize; i++) {
00049 if(i < 12) {
00050 E_blk[i] = ((data[i]) & charge_mask);
00051 T_blk[i] = ((data[i]) & time_mask) >> 16;
00052 }
00053 if(i >= 12 && i < 14) {
00054 E_blkE[i-12] = ((data[i]) & charge_mask);
00055 T_blkE[i-12] = ((data[i]) & time_mask) >> 16;
00056 }
00057 if(i >= 14 && i < 16) {
00058 E_blkW[i-14] = ((data[i]) & charge_mask);
00059 T_blkW[i-14] = ((data[i]) & time_mask) >> 16;
00060 }
00061 if(i >= 16 && i < 23) {
00062 if(i == 16) { E_B_Etot = ((data[i]) & charge_mask); T_B_Etot = ((data[i]) & time_mask) >> 16; }
00063 if(i == 17) { E_E_Etot = ((data[i]) & charge_mask); T_E_Etot = ((data[i]) & time_mask) >> 16; }
00064 if(i == 18) { E_blkAll = ((data[i]) & charge_mask); T_blkAll = ((data[i]) & time_mask) >> 16; }
00065 if(i == 19) { E_eastHalf = ((data[i]) & charge_mask); T_eastHalf = ((data[i]) & time_mask) >> 16; }
00066 if(i == 20) { E_westHalf = ((data[i]) & charge_mask); T_westHalf = ((data[i]) & time_mask) >> 16; }
00067 if(i == 21) { E_eastEndHalf = ((data[i]) & charge_mask); T_eastEndHalf = ((data[i]) & time_mask) >> 16; }
00068 if(i == 22) { E_westEndHalf = ((data[i]) & charge_mask); T_westEndHalf = ((data[i]) & time_mask) >> 16; }
00069 }
00070 if(i == 23) {
00071 for(uint32_t j = 0, mask = 1; j < 16; j++, mask <<= 1) {
00072 if(data[i] & mask) midCondi[j] = 1;
00073 }
00074 }
00075 if(i >= 24 && i < 24 + 20*window) {
00076 uint32_t winId = uint32_t ((i-24)/20);
00077 uint32_t id = i - (24+winId*20);
00078 if(i >= (24+winId*20) && i < (39+winId*20)) {
00079 for(uint32_t j = 0, mask = 1; j < 24; j++, mask <<= 1) {
00080 if(j < 11) {
00081 if(data[i] & mask) TC[j][2*id+1][winId] = 1;
00082 }
00083 if(j >= 12 && j < 23) {
00084 if(data[i] & mask) TC[j-12][2*id][winId] = 1;
00085 }
00086 }
00087 }
00088 if(i == (39+winId*20)) {
00089 for(uint32_t j = 0, mask = 1; j < 16; j++, mask <<= 1) {
00090 if(data[i] & mask) TC_E[j][winId] = 1;
00091 }
00092 }
00093 if(i == (40+winId*20)) {
00094 for(uint32_t j = 0, mask = 1; j < 16; j++, mask <<= 1) {
00095 if(data[i] & mask) TC_E[j+16][winId] = 1;
00096 }
00097 }
00098 if(i == (41+winId*20)) {
00099 for(uint32_t j = 0, mask = 1; j < 16; j++, mask <<= 1) {
00100 if(data[i] & mask) TC_W[j][winId] = 1;
00101 }
00102 }
00103 if(i == (42+winId*20)) {
00104 for(uint32_t j = 0, mask = 1; j < 16; j++, mask <<= 1) {
00105 if(data[i] & mask) TC_W[j+16][winId] = 1;
00106 }
00107 }
00108 if(i == (43+winId*20)) {
00109 for(uint32_t j = 0, mask = 1; j < 16; j++, mask <<= 1) {
00110 if(data[i] & mask) emcTrigCondi[j][winId] = 1;
00111 }
00112 }
00113 }
00114 }
00115 if(24 + 20*window != datasize) std::cerr << "ERROR: The data in EACC are not complete" << std::endl;
00116 }
00117
00118 void TrigEACC::print() {
00119 }