00001 #include <iostream> 00002 #include "TrigEvent/TrigGTL.h" 00003 00004 TrigGTL::TrigGTL(char* name) 00005 { 00006 m_name = name; 00007 } 00008 00009 void TrigGTL::initialize() 00010 { 00011 for(int i = 0; i < 48; i++) 00012 { 00013 m_dataGroup12_One[i] = 0; 00014 m_dataGroup12_Zero[i] = 0; 00015 m_dataGroup34_One[i] = 0; 00016 m_dataGroup34_Zero[i] = 0; 00017 if(i < 24) { 00018 m_dataGroup5_One[i] = 0; 00019 m_dataGroup5_Zero[i] = 0; 00020 } 00021 } 00022 } 00023 00024 void TrigGTL::setGTLTrigData( uint32_t boardId, uint32_t window, uint32_t datasize, const uint32_t* data) { 00025 00026 if(boardId != 0xD3) std::cerr << "ERROR: You set the wrong board data to TrigGTL!!!" << std::endl; 00027 if(datasize%window != 0) std::cerr << "WARNING: The data in GTL maybe not complete!!!" << std::endl; 00028 00029 for(uint32_t i = 0; i < datasize; i++) { 00030 uint32_t dataId = ((data[i] >> 24) & 0x7); 00031 for(uint32_t j = 0, mask = 1; j < 24; j++, mask <<= 1) { 00032 if(dataId == 1) { 00033 if((data[i] & mask) != 0) { 00034 m_dataGroup12_One[j] += 1; 00035 } 00036 if(m_dataGroup12_One[j] == 0) m_dataGroup12_Zero[j] += 1; 00037 } 00038 if(dataId == 2) { 00039 if((data[i] & mask) != 0) { 00040 m_dataGroup12_One[j+24] += 1; 00041 } 00042 if(m_dataGroup12_One[j+24] == 0) m_dataGroup12_Zero[j+24] += 1; 00043 } 00044 if(dataId == 3) { 00045 if((data[i] & mask) != 0) { 00046 m_dataGroup34_One[j] += 1; 00047 } 00048 if(m_dataGroup34_One[j] == 0) m_dataGroup34_Zero[j] += 1; 00049 } 00050 if(dataId == 4) { 00051 if((data[i] & mask) != 0) { 00052 m_dataGroup34_One[j+24] += 1; 00053 } 00054 if(m_dataGroup34_One[j+24] == 0) m_dataGroup34_Zero[j+24] += 1; 00055 } 00056 if(dataId == 5) { 00057 if((data[i] & mask) != 0) { 00058 m_dataGroup5_One[j] += 1; 00059 } 00060 if(m_dataGroup5_One[j] == 0) m_dataGroup5_Zero[j] += 1; 00061 } 00062 } 00063 } 00064 }