00001 00002 00003 #include "cafe/Trigger.hpp" 00004 00005 #include <algorithm> 00006 #include "cafe/Config.hpp" 00007 #include "cafe/Event.hpp" 00008 #include "tmb_tree/TMBTrigger.hpp" 00009 00010 namespace cafe { 00011 00012 Trigger::Trigger(const char *name) 00013 : Processor(name), 00014 _vars("_trgname") 00015 { 00016 using namespace std; 00017 00018 Config config(name); 00019 vector<string> temp = config.getVString("Triggers", " ,"); 00020 _triggerNames.insert(temp.begin(), temp.end()); 00021 00022 if(_triggerNames.size() == 0) { 00023 warn() << "Trigger[" << name << "] No triggers specified ? All events will fail" 00024 << endl; 00025 } 00026 00027 out() << "Trigger[" << name << "] Triggers = "; 00028 for(set<string>::iterator it = _triggerNames.begin(); 00029 it != _triggerNames.end(); ++it) { 00030 out() << *it << ' '; 00031 } 00032 out() << endl; 00033 } 00034 00035 bool Trigger::processEvent(Event& event) 00036 { 00037 using namespace std; 00038 00039 Collection<TMBTrigger> triggers = event.getTriggers(_vars); 00040 00041 // 00042 // This is proportional to the number of triggers in the event 00043 // and about log(numUserTriggers). 00044 // 00045 for(Collection<TMBTrigger>::const_iterator it = triggers.begin(); 00046 it != triggers.end(); 00047 ++it) { 00048 if(_triggerNames.find((*it).getTrgName()) != _triggerNames.end()) { 00049 return true; 00050 } 00051 } 00052 00053 return false; 00054 } 00055 00056 } 00057 00058 ClassImp(cafe::Trigger) 00059
1.3.4