00001 #include "TsTriggerAlg.h"
00002 #include "TrigSim/ITsTriggerTool.h"
00003
00004 #include "Event/SimTrigHeader.h"
00005 #include "Event/ElecHeader.h"
00006
00007 #include <vector>
00008
00009 TsTriggerAlg::TsTriggerAlg(const std::string& name, ISvcLocator* pSvcLocator)
00010 : DybAlgorithm<DayaBay::SimTrigHeader>(name,pSvcLocator)
00011 {
00012 m_trigToolNames.push_back("TsMultTriggerTool");
00013 declareProperty("TrigTools",m_trigToolNames,
00014 "Tools to generate Triggers");
00015 declareProperty("TriggerFilter",m_trigFilterName="TsSortTool",
00016 "Tool to do final filtering / combining of triggers");
00017 declareProperty("TrigName", m_trigName = "TriggerAlg",
00018 "Name of this Trigger Algorithm for book keeping purposes.");
00019 declareProperty("ElecLocation",m_elecLocation=DayaBay::ElecHeaderLocation::Default,
00020 "Location in the TES where the input ElecHeader is to be put.");
00021 }
00022
00023 TsTriggerAlg::~TsTriggerAlg()
00024 {
00025 }
00026
00027 StatusCode TsTriggerAlg::initialize()
00028 {
00029 for (size_t ind=0; ind < m_trigToolNames.size(); ++ind) {
00030 std::string tgr = m_trigToolNames[ind];
00031 try {
00032 m_trigTools.push_back(tool<ITsTriggerTool>(tgr));
00033 }
00034 catch(const GaudiException& exg) {
00035 fatal() << "Failed to get Trigger Tool: \"" << tgr << "\"" << endreq;
00036 return StatusCode::FAILURE;
00037 }
00038 info () << "Added trigger tool " << tgr << endreq;
00039 }
00040 try {
00041 m_triggerSorter = tool<ITsTriggerTool>(m_trigFilterName);
00042 }
00043 catch(const GaudiException& exg){
00044 fatal() << "Failed to get TriggerFilterTool: \"" << m_trigFilterName
00045 << "\"" << endreq;
00046 return StatusCode::FAILURE;
00047 }
00048
00049 return StatusCode::SUCCESS;
00050 }
00051
00052 StatusCode TsTriggerAlg::execute()
00053 {
00054
00055 DayaBay::SimTrigHeader* trigHeader = MakeHeaderObject();
00056 trigHeader->setCommandHeader(new DayaBay::SimTrigCommandHeader(trigHeader));
00057
00058 DayaBay::ElecHeader* elecHeader = getTES<DayaBay::ElecHeader>(m_elecLocation);
00059
00060
00061
00062 trigHeader->setTimeStamp(elecHeader->timeStamp());
00063 TimeStamp earliest = elecHeader->earliest();
00064 TimeStamp latest = elecHeader->latest();
00065
00066 trigHeader->setEarliest(earliest);
00067 trigHeader->setLatest(latest);
00068 trigHeader->setContext(elecHeader->context());
00069
00070
00071 for (size_t ind = 0; ind< m_trigTools.size(); ++ind) {
00072 debug () << "Running trigger tool #" << ind << " " << m_trigToolNames[ind] << endreq;
00073 if (m_trigTools[ind]->mutate(trigHeader,*elecHeader).isFailure()) {
00074 fatal() << "Trigger Tool " << m_trigToolNames[ind]
00075 << " failed" << endreq;
00076 return StatusCode::FAILURE;
00077 }
00078 }
00079 if ( m_triggerSorter->mutate(trigHeader,*elecHeader).isFailure()){
00080 fatal() << "Trigger Tool " << m_triggerSorter
00081 << " failed" << endreq;
00082 return StatusCode::FAILURE;
00083 }
00084
00085 return StatusCode::SUCCESS;
00086 }
00087
00088 StatusCode TsTriggerAlg::finalize()
00089 {
00090 debug() << "finalizing TsTriggerAlg" << endreq;
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100 m_trigTools.clear();
00101 return this->GaudiAlgorithm::finalize();
00102 }
00103