00001 00021 #ifndef TRIGREADPROC_H 00022 #define TRIGREADPROC_H 00023 00024 #include "Stage/StageProcessor.h" 00025 #include "Event/ElecHeader.h" 00026 #include "Event/SimTrigHeader.h" 00027 #include "Event/SimReadoutHeader.h" 00028 #include "Event/SimReadout.h" 00029 00030 #include "ReadoutSim/IROsReadoutTool.h" 00031 #include "ReadoutSim/IROsTriggerDataPackerTool.h" 00032 #include "TrigSim/ITsTriggerTool.h" 00033 #include "FastTrigReadSim/IFastTrigReadSimTool.h" 00034 00036 #include "Stage/IStage.h" 00037 #include "Stage/FFTimeStamp.h" 00038 #include "Stage/HeaderStageData.h" 00039 00040 using namespace DayaBay; 00041 00042 class ITsTriggerTool; 00043 00044 class TrigReadProc : public StageProcessor<DayaBay::SimReadoutHeader> 00045 { 00046 public: 00047 TrigReadProc(const std::string& name,ISvcLocator* pSvcLocator); 00048 virtual ~TrigReadProc(); 00049 00050 virtual StatusCode initialize(); 00051 virtual StatusCode execute(); 00052 virtual StatusCode finalize(); 00053 00054 private: 00055 00057 std::vector<std::string> m_trigToolNames; 00058 std::vector<ITsTriggerTool*> m_trigTools; 00059 00060 std::string m_trigFilterName; 00061 ITsTriggerTool* m_triggerSorter; 00062 00064 std::vector<std::string> m_roToolNames; 00065 std::vector<IROsReadoutTool*> m_roTools; 00066 00067 std::string m_roTrigPackName; 00068 IROsTriggerDataPackerTool* m_roTrigPackTool; 00069 00071 typedef HeaderStageData<ElecHeader> ElecData; 00072 typedef HeaderStageData<SimReadoutHeader> SimReadoutData; 00073 00076 SimReadoutData::DataList m_SimRODataList; 00077 00079 FFTimeStamp m_currentTime; 00080 00082 std::string m_fastToolName; 00083 IFastTrigReadSimTool* m_fastTool; 00084 00085 private: 00086 00087 // implemenation details 00088 00089 // Run trigger sim on ElecHeader, produce TrigHeader 00090 StatusCode runTrigSim(const ElecHeader& elecHeader, 00091 SimTrigHeader*& trigHeader); 00092 00093 // Run readout sim on ElecHeader and TrigHeader, produce SimReadoutHeader 00094 StatusCode runReadoutSim(const ElecHeader& elecHeader, 00095 const SimTrigHeader& trigHeader, 00096 SimReadoutHeader*& sroHeader); 00097 00098 // Get the next SimReadoutHeader, Triger and Readout 00099 StatusCode TR_execute(const ElecHeader* ehead,SimReadoutHeader*& srhead); 00100 00101 // Fast trigger and readout simulation 00102 StatusCode fastTrigReadSim(const ElecHeader* ehead,SimReadoutHeader*& srhead); 00103 00104 const SimReadoutHeader* m_currentSRHeader; 00105 }; 00106 00107 #endif // TRIGREADPROC_H