00001 #include <iostream> 00002 #include "TrigEvent/TrigCondition.h" 00003 00004 const std::string TrigCondition::s_CONDITIONS[] = { 00005 "00: NCluster >= 1", 00006 "01: NCluster >= 2", 00007 "02: Barrel Cluster back to back", 00008 "03: Endcap Cluster back to back", 00009 "04: Cluster Balance in Z direction", 00010 "05: Barrel Cluster Balance in Phi direction", 00011 "06: Endcap Cluster phi Balance", 00012 "07: Barrel total Energy Higher threshold", 00013 "08: Endcap total Energy Higher threshold", 00014 "09: Total Energy Lower threshold", 00015 "10: Total Energy Middle threshold", 00016 "11: Energy Balance in \"Z\" direction", 00017 "12: Barrel Energy difference Balance", 00018 "13: Endcap Energy difference Balance", 00019 "14: Energy Block Balance", 00020 "15: Endcap Energy Balance", 00021 "16: Endcap TOF back to back", 00022 "17: Barrel TOF back to back", 00023 "18: NETOF >= 2", 00024 "19: NETOF >= 1", 00025 "20: NBTOF >= 2", 00026 "21: NBTOF >= 1", 00027 "22: Not defined yet", 00028 "23: Not defined yet", 00029 "24: Not defined yet", 00030 "25: Not defined yet", 00031 "26: Not defined yet", 00032 "27: Not defined yet", 00033 "28: Not defined yet", 00034 "29: Not defined yet", 00035 "30: Not defined yet", 00036 "31: Not defined yet", 00037 "32: MUON Back to Back 3478", 00038 "33: MUON Back to Back 37", 00039 "34: Not defined yet", 00040 "35: Not defined yet", 00041 "36: Not defined yet", 00042 "37: Not defined yet", 00043 "38: Short Track back to back", 00044 "39: NStrk >= N", 00045 "40: NStrk >= 2", 00046 "41: NStrk >= 1", 00047 "42: Long Track back to back", 00048 "43: NLtrk >= N", 00049 "44: NLtrk >= 2", 00050 "45: NLtrk >= 1", 00051 "46: NItrk >= 1", 00052 "47: NItrk >= 2" 00053 }; 00054 00055 TrigCondition::TrigCondition(char* name, uint32_t window, const uint32_t* data) : 00056 m_name(name) 00057 { 00058 for (uint32_t group = 0; group < 2; group++) { 00059 uint32_t iBegin = group * 24; 00060 uint32_t iEnd = (group + 1) * 24; 00061 uint32_t jBegin = group * window; 00062 uint32_t jEnd = (group + 1) * window; 00063 for (uint32_t i = iBegin, mask = 1; i < iEnd; i++, mask <<= 1) { 00064 uint32_t num_One = 0, num_Zero = 0; 00065 for (uint32_t j = jBegin; j < jEnd; j++) { 00066 if ((data[j] & mask) != 0) { 00067 num_One++; 00068 } 00069 else { 00070 if (num_One == 0) num_Zero++; 00071 } 00072 } 00073 m_num_One[i] = num_One; 00074 m_num_Zero[i] = num_Zero; 00075 } 00076 } 00077 00078 for (uint32_t i = 0; i < 48; i++) { 00079 if (m_num_One[i] != 0) m_condList.push_back(i); 00080 } 00081 } 00082 00083 void TrigCondition::print() const { 00084 int size = m_condList.size(); 00085 std::cout << "TrigCondition-" << m_name << " contains the following conditions:" << std::endl; 00086 for (int i = 0; i < size; i++) { 00087 std::cout << '\t' << s_CONDITIONS[m_condList[i]] << std::endl; 00088 } 00089 }