| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

TsTriggerAlg.cc

Go to the documentation of this file.
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     // Look for pre-existing header object or make new one
00055     DayaBay::SimTrigHeader* trigHeader = MakeHeaderObject();
00056     trigHeader->setCommandHeader(new DayaBay::SimTrigCommandHeader(trigHeader));
00057         
00058     DayaBay::ElecHeader* elecHeader = getTES<DayaBay::ElecHeader>(m_elecLocation);
00059     
00060     //set triggers to have same validity range as the crate it belongs to.
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     // Let each tool do its thing on the event
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     // HeaderObject base
00085     return StatusCode::SUCCESS;
00086 }
00087 
00088 StatusCode TsTriggerAlg::finalize()
00089 {
00090     debug() << "finalizing TsTriggerAlg" << endreq;
00091     
00092     // Tools seem to be released by the base class.
00093     
00094     //for (size_t ind=0; ind < m_trigTools.size(); ++ind) {
00095         //verbose() << "Releasing " << m_trigTools[ind] << endreq;
00096         //m_trigTools[ind]->release();
00097     //}
00098     //m_triggerSorter->release();
00099     
00100     m_trigTools.clear();
00101     return this->GaudiAlgorithm::finalize();
00102 }
00103 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:50:03 2011 for TrigSim by doxygen 1.4.7