00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef _ROFEEREADOUTTOOLL_H_
00011 #define _ROFEEREADOUTTOOLL_H_
00012
00013 #include "ReadoutSim/IROsReadoutTool.h"
00014 #include "ReadoutSim/IROsFeeWaveformTool.h"
00015 #include "ReadoutSim/IROsFeeTdcTool.h"
00016 #include "ReadoutSim/IROsFadcReadoutTool.h"
00017
00018 #include "GaudiAlg/GaudiTool.h"
00019
00020 #include "Conventions/Detectors.h"
00021 #include "Conventions/Trigger.h"
00022 #include "DataSvc/ISimDataSvc.h"
00023
00024 #include <vector>
00025 #include <string>
00026
00027 namespace DayaBay{
00028 class ElecHeader;
00029 class ElecFeeCrate;
00030 class ElecFeeChannel;
00031 class SimTrigHeader;
00032 class SimTrigCommand;
00033 class SimReadoutHeader;
00034 class ReadoutPmtCrate;
00035 class ReadoutPmtChannel;
00036 class ReadoutTriggerDataPkg;
00037 class ReadoutTriggerDataFrame;
00038 }
00039
00040 class ROsFeeReadoutTool : public GaudiTool , virtual public IROsReadoutTool
00041 {
00042 public:
00043
00044 ROsFeeReadoutTool(const std::string& type,
00045 const std::string& name,
00046 const IInterface* parent);
00047
00048 virtual ~ROsFeeReadoutTool();
00049
00050 virtual StatusCode mutate(DayaBay::SimReadoutHeader *roHeader,
00051 std::vector<DayaBay::ReadoutTriggerDataPkg*>& trigDataPkg,
00052 const DayaBay::ElecHeader& elecHeader);
00053
00054 virtual StatusCode initialize();
00055 virtual StatusCode finalize();
00056
00057 private:
00058 virtual StatusCode makeReadouts(DayaBay::SimReadoutHeader *roHeader,
00059 std::vector<DayaBay::ReadoutTriggerDataPkg*>& trigDataPkg,
00060 const DayaBay::ElecHeader& elecHeader);
00061
00062 DayaBay::ReadoutPmtCrate* readoutCrate(const DayaBay::ReadoutTriggerDataFrame *tdf,
00063 const DayaBay::ElecFeeCrate *cr, Context context);
00064
00065 DayaBay::ReadoutPmtChannel* readoutChannel(const DayaBay::ReadoutTriggerDataFrame *tdf,
00066 const DayaBay::ElecFeeChannel *ch,
00067 DayaBay::FeeChannelId channelId,
00068 Context context);
00069
00070 IROsFeeTdcTool* m_tdcTool;
00071 IROsFeeWaveformTool* m_waveformTool;
00072 IROsFadcReadoutTool* m_fadcTool;
00073
00074 bool m_enablePeakReadout;
00075 bool m_enableWaveformReadout;
00076 bool m_enableFadcReadout;
00077 std::string m_tdcToolName;
00078 std::string m_waveformToolName;
00079 std::string m_fadcToolName;
00080
00081
00082 std::string m_simDataSvcName;
00083 ISimDataSvc *m_simDataSvc;
00084
00085 std::vector<std::string> m_detectorsToProcess;
00086 std::set<DayaBay::Detector> m_detectors;
00087 std::vector<int> m_roCycles;
00088 int m_readoutLength;
00089 int m_triggerLatency;
00090 int m_peakFindingLength;
00091 int m_peakFindingOffset;
00092 bool m_peakFindingOverlap;
00093 int m_readoutOffset;
00094 int m_preAdcOffset;
00095 int m_fadcOffset;
00096 int m_fadcLength;
00097 int m_nhitCycles;
00098 int m_eSumCycles;
00099 int m_maxFineAdc;
00100 };
00101
00102
00103
00104 #endif