/search.css" rel="stylesheet" type="text/css"/> /search.js">
00001 /* 00002 * \class ROsFecReadoutTool 00003 * 00004 * \brief Fec Readout Tool 00005 * 00006 * viktor 00007 * 00008 */ 00009 00010 #ifndef _ROFECREADOUTTOOLL_H_ 00011 #define _ROFECREADOUTTOOLL_H_ 00012 00013 #include "ReadoutSim/IROsReadoutTool.h" 00014 #include "GaudiAlg/GaudiTool.h" 00015 00016 #include "Conventions/Detectors.h" 00017 #include "Conventions/Trigger.h" 00018 00019 #include "Event/ReadoutRpcCrate.h" 00020 #include "Event/ElecFecCrate.h" 00021 00022 #include <vector> 00023 #include <string> 00024 00025 namespace DayaBay{ 00026 class ElecHeader; 00027 class SimTrigHeader; 00028 class ReadoutTriggerDataPkg; 00029 class ReadoutRpcTriggerDataPkg; 00030 class ReadoutRpcTriggerDataFrame; 00031 class SimReadoutHeader; 00032 } 00033 00034 class ROsFecReadoutTool : public GaudiTool , virtual public IROsReadoutTool 00035 { 00036 public: 00037 00038 ROsFecReadoutTool(const std::string& type, 00039 const std::string& name, 00040 const IInterface* parent); 00041 00042 virtual ~ROsFecReadoutTool(); 00043 00044 virtual StatusCode mutate(DayaBay::SimReadoutHeader *roHeader, 00045 std::vector<DayaBay::ReadoutTriggerDataPkg*>& trigDataPkg, 00046 const DayaBay::ElecHeader& elecHeader); 00047 00048 virtual StatusCode initialize(); 00049 virtual StatusCode finalize(); 00050 00051 private: 00052 virtual StatusCode makeReadouts(DayaBay::SimReadoutHeader *roHeader, 00053 std::vector<DayaBay::ReadoutTriggerDataPkg*>& trigDataPkg, 00054 const DayaBay::ElecHeader& elecHeader); 00055 DayaBay::ReadoutRpcCrate* readoutCrate(const DayaBay::ReadoutRpcTriggerDataFrame *tdf, 00056 const DayaBay::ElecFecCrate *cr, Context context); 00057 DayaBay::ReadoutFecBoard* readoutBoard(const DayaBay::ReadoutRpcTriggerDataFrame *tdf, 00058 const DayaBay::ElecFecBoard *brd, Context context); 00059 private: 00060 std::vector<std::string> m_detectorsToProcess; 00061 std::set<DayaBay::Detector> m_detectors; 00062 std::map<DayaBay::ElecChannelId, TimeStamp> m_lastRead; 00063 int m_refuseTime; 00064 int m_readoutWindow; 00065 int m_readoutWindowPosition; 00066 // FIXME: explain better the readout window position, decide on the convention: clocks counted from the end or from the beginning of the window? 00067 }; 00068 00069 00070 00071 #endif /* _ROFECREADOUTTOOLL_H_ */