Go to the documentation of this file.00001 #include "ForIA/TriggerConfiguration.hh"
00002
00003
00004 namespace ForIA{
00005
00006 const string TriggerConfiguration::BAD_TRIGGER_NAME = "__BAD_TRIGGER_NAME__";
00007
00008 TriggerConfiguration::TriggerConfiguration(): m_status(EMPTY), m_smk(0), m_l1PSK(0), m_hltPSK(0),
00009 m_gotL1BitNames(false),m_gotHltChainNames(false){
00010
00011 }
00013 TriggerConfiguration::Status TriggerConfiguration::status()const{
00014 return m_status;
00015 }
00017 void TriggerConfiguration::clear(){
00018 m_smk = 0;
00019 m_l1PSK = 0;
00020 m_hltPSK = 0;
00021 m_status = EMPTY;
00022 m_gotHltChainNames = false;
00023 return;
00024 }
00026 void TriggerConfiguration::resetChainNames(){
00027 m_l1BitNames.clear();
00028 m_gotL1BitNames = false;
00029 m_hltChainNames.clear();
00030 m_gotHltChainNames = false;
00031 m_hltNames.clear();
00032 m_lowerChainNames.clear();
00033 return;
00034 }
00036 unsigned int TriggerConfiguration::superMasterKey()const{
00037 return m_smk;
00038 }
00040 unsigned int TriggerConfiguration::l1PrescaleKey()const{
00041 return m_l1PSK;
00042 }
00044 unsigned int TriggerConfiguration::hltPrescaleKey()const{
00045 return m_hltPSK;
00046 }
00047
00049 const string &TriggerConfiguration::lowerChainName(const string &hltName)const{
00050 map<string, string>::const_iterator it = m_lowerChainNames.find(hltName);
00051
00052 if(it == m_lowerChainNames.end()) return TriggerConfiguration::BAD_TRIGGER_NAME;
00053
00054 return it->second;
00055 }
00056
00058 int TriggerConfiguration::hltChainID(const string &name)const{
00059
00060 map<string, int>::const_iterator it = m_hltNames.find(name);
00061
00062 if(it == m_hltNames.end()){
00063 return -1;
00064 }
00065 return it->second;
00066 }
00068 string TriggerConfiguration::hltChainName(int id)const{
00069 map<int, string>::const_iterator it = m_hltIDs.find(id);
00070
00071 string result="";
00072 bool found = false;
00073 if(it==m_hltIDs.end()){
00074 for(map<string, int>::const_iterator nn = m_hltNames.begin();
00075 nn != m_hltNames.end(); ++nn){
00076 if(nn->second == id){
00077 m_hltIDs[id] = nn->first;
00078 result = nn->first;
00079 found = true;
00080 break;
00081 }
00082 }
00083 }else{
00084 return it->second;
00085 }
00086
00087 if(!found){
00088 m_hltIDs[id]=result;
00089 }
00090
00091 return result;
00092 }
00094 float TriggerConfiguration::hltPrescale(const string &name)const{
00095
00096 map<string, float>::const_iterator it = m_hltPrescales.find(name);
00097
00098 if(it == m_hltPrescales.end()) return -1.;
00099
00100 return it->second;
00101 }
00102
00104 float TriggerConfiguration::l1Prescale(const string &name)const{
00105 map<string, float>::const_iterator it = m_l1Prescales.find(name);
00106 if(it == m_l1Prescales.end()) return -1.;
00107
00108 return it->second;
00109 }
00110
00112 float TriggerConfiguration::chainPrescale(const string &name)const{
00113
00114 boost::unordered_map<string, float>::const_iterator it = m_totalPrescale.find(name);
00115 if(it != m_totalPrescale.end())return it->second;
00116
00117 string trigName = name;
00118 float prescale = 1.;
00119 float subTrig = hltPrescale(trigName);
00120
00121 while(subTrig > 0.){
00122 prescale *= subTrig;
00123 trigName = lowerChainName(trigName);
00124 subTrig = hltPrescale(trigName);
00125 }
00126
00127 subTrig = l1Prescale(trigName);
00128 if(subTrig > 0.) prescale *= subTrig;
00129
00130 m_totalPrescale.insert(std::pair<string, float>(name, prescale));
00131
00132 return prescale;
00133 }
00134
00136 const vector<string> &TriggerConfiguration::l1Names()const{
00137 if(m_gotL1BitNames) return m_l1BitNames;
00138 m_l1BitNames.clear();
00139
00140 for(NameIDMap::const_iterator it = m_l1Names.begin();
00141 it != m_l1Names.end(); ++it){
00142 m_l1BitNames.push_back(it->first);
00143 }
00144
00145 return m_l1BitNames;
00146 }
00148 int TriggerConfiguration::l1Ctpid(const string &name)const{
00149
00150
00151
00152
00153
00154
00155
00156
00157 NameIDMap::const_iterator it = m_l1Names.find(name);
00158
00159 if(it==m_l1Names.end()) return -1;
00160 return it->second;
00161 }
00163 const vector<string> &TriggerConfiguration::hltChainNames()const{
00164 if(m_gotHltChainNames) return m_hltChainNames;
00165
00166 m_hltChainNames.clear();
00167
00168 for(NameIDMap::const_iterator it = m_hltNames.begin();
00169 it != m_hltNames.end(); ++it){
00170 m_hltChainNames.push_back(it->first);
00171 }
00172
00173 m_gotHltChainNames = true;
00174
00175 return m_hltChainNames;
00176 }
00177
00178 }
00179