/search.css" rel="stylesheet" type="text/css"/> /search.js">
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

ROsReadoutAlg.cc
Go to the documentation of this file.
00001 #include "ROsReadoutAlg.h"
00002 #include "ReadoutSim/IROsReadoutTool.h"
00003 #include "ReadoutSim/IROsTriggerDataPackerTool.h"
00004 
00005 #include "Event/SimReadoutHeader.h"
00006 #include "Event/ReadoutTriggerDataPkg.h"
00007 #include "Event/SimTrigHeader.h"
00008 #include "Event/ElecHeader.h"
00009 
00010 #include <vector>
00011 
00012 ROsReadoutAlg::ROsReadoutAlg(const std::string& name, ISvcLocator* pSvcLocator)
00013     : DybAlgorithm<DayaBay::SimReadoutHeader>(name,pSvcLocator)
00014 {
00015     m_roToolNames.push_back("ROsFeeReadoutTool");
00016     m_roToolNames.push_back("ROsFecReadoutTool");
00017     declareProperty("RoTools",m_roToolNames,
00018                     "Tools to generate Triggers");
00019     declareProperty("RoName", m_roName = "ReadoutAlg",
00020                     "Name of this Trigger Algorithm for book keeping purposes.");
00021     declareProperty("TrigPackagerTool",m_roTrigPackName="ROsTriggerDataPackerTool",
00022                     "Tool to convert trigger commands from TrigSim to TriggerDataPackage");
00023     declareProperty("TrigLocation",m_trigLocation=DayaBay::SimTrigHeaderLocation::Default,
00024                     "Location in the TES where the output SimTrigHeader is to be found.");
00025     declareProperty("ElecLocation",m_elecLocation=DayaBay::ElecHeaderLocation::Default,
00026                     "Location in the TES where the input ElecHeader is to be found.");
00027 }
00028 
00029 ROsReadoutAlg::~ROsReadoutAlg()
00030 {
00031 }
00032 
00033 StatusCode ROsReadoutAlg::initialize()
00034 {
00035 
00037     try{
00038         m_roTrigPackTool = tool<IROsTriggerDataPackerTool>(m_roTrigPackName);
00039     }catch(const GaudiException& exg){
00040         fatal() << "Failed to get Readout Trigger Package Tool: \""
00041                 << m_roTrigPackName << "\"" << endreq;
00042         return StatusCode::FAILURE;
00043     }
00044 
00046     for (size_t ind=0; ind < m_roToolNames.size(); ++ind) {
00047         std::string rotool = m_roToolNames[ind];
00048         try{
00049                 m_roTools.push_back(tool<IROsReadoutTool>(rotool));
00050         }catch(const GaudiException& exg) {
00051             fatal() << "Failed to get Readout Tool: \"" << rotool
00052                     << "\"" << endreq;
00053             return StatusCode::FAILURE;
00054         }
00055         info () << "Added readout tool " << rotool << endreq;
00056     }
00057 
00058     return StatusCode::SUCCESS;
00059 }
00060 
00061 StatusCode ROsReadoutAlg::execute()
00062 {
00063     debug() << "Entering ROsReadoutAlg.execute()" << endreq;
00064     // Look for pre-existing header object or make new one
00065     DayaBay::SimReadoutHeader* roHeader = MakeHeaderObject();
00066 
00067     //set readouts to have same validity range as the crate its read out from.
00068     // This can be refined later.
00069     DayaBay::ElecHeader* elecHeader = getTES<DayaBay::ElecHeader>(m_elecLocation);
00070     DayaBay::SimTrigHeader* trigHeader = getTES<DayaBay::SimTrigHeader>(m_trigLocation);
00071 
00072     //roHeader->setTimeStamp(elecHeader->timeStamp()); // this seems redundant (and duplicating) when one looks at the line 78
00073     TimeStamp earliest = elecHeader->earliest();
00074     TimeStamp latest = elecHeader->latest();
00075 
00076     roHeader->setEarliest(earliest);
00077     roHeader->setLatest(latest);
00078     roHeader->setContext(elecHeader->context());
00079 
00081     debug() << "Applying Trigger Data Packer Tool" << endreq;
00082 
00084     std::vector<DayaBay::ReadoutTriggerDataPkg*> trigPkgs;
00085 
00089     m_roTrigPackTool->fillDataPackages(trigPkgs,*trigHeader);
00090 
00091     // Let each tool do its thing on the event
00092     for (size_t ind = 0; ind< m_roTools.size(); ++ind) {
00093         debug () << "Running trigger tool #" << ind << " " << m_roToolNames[ind] << endreq;
00094         if (m_roTools[ind]->mutate(roHeader,trigPkgs,*elecHeader).isFailure()) {
00095             fatal() << "Readout Tool " << m_roToolNames[ind]
00096                     << " failed" << endreq;
00097             return StatusCode::FAILURE;
00098         }
00099     }
00100 
00101     verbose() << *roHeader << endreq;
00102     // HeaderObject base
00103     return StatusCode::SUCCESS;
00104 }
00105 
00106 StatusCode ROsReadoutAlg::finalize()
00107 {
00108     m_roTools.clear();
00109 
00110     return this->GaudiAlgorithm::finalize();
00111 }
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Fri May 16 2014 10:17:05 for ReadoutSim by doxygen 1.7.4