00001 00010 #ifndef DIGITIZEALG_H 00011 #define DIGITIZEALG_H 00012 00013 #include "DybAlg/DybAlgorithm.h" 00014 00015 #include "Event/SimHeader.h" 00016 #include "Event/SimHit.h" 00017 #include "Event/ElecHeader.h" 00018 #include "Event/SimTrigHeader.h" 00019 #include "Event/SimReadoutHeader.h" 00020 #include "Event/SimReadout.h" 00021 00022 #include "ElecSim/IEsPulseTool.h" 00023 #include "ElecSim/IEsFrontEndTool.h" 00024 #include "TrigSim/ITsTriggerTool.h" 00025 #include "ReadoutSim/IROsReadoutTool.h" 00026 #include "ReadoutSim/IROsTriggerDataPackerTool.h" 00027 00028 #include "SimHitSplitSvc/ISimHitSplitSvc.h" 00029 #include "Context/TimeStamp.h" 00030 00031 #include <vector> 00032 00033 using namespace std; 00034 00035 class DigitizeAlg : public DybAlgorithm<DayaBay::SimReadoutHeader> 00036 { 00037 public: 00038 DigitizeAlg(const string& name, ISvcLocator* pSvcLocator); 00039 virtual ~DigitizeAlg(); 00040 00041 virtual StatusCode initialize(); 00042 virtual StatusCode execute(); 00043 virtual StatusCode finalize(); 00044 00045 private: 00046 // List of detector names to include in digitalization 00047 vector<string> m_detectorNames; 00048 // Name of the PMT simulation tool 00049 string m_pmtToolName; 00050 // Name of the RPC simulation tool 00051 string m_rpcToolName; 00052 // Name of the PMT electronics sim tool 00053 string m_feeToolName; 00054 // Name of the RPC electronics sim tool 00055 string m_fecToolName; 00056 00057 //List of simulated detector IDs 00058 vector<DayaBay::Detector> m_detectors; 00059 //Tool for adding PMT effects to simulated hits 00060 IEsPulseTool* m_pmtTool; 00061 //Tool for adding RPC effects to simulated hits 00062 IEsPulseTool* m_rpcTool; 00063 //Tool for generating PMT Front-end electronics signals 00064 IEsFrontEndTool* m_feeTool; 00065 //Tool for generating RPC Front-end card signals 00066 IEsFrontEndTool* m_fecTool; 00067 00068 //Earliests and Latests 00069 vector<TimeStamp> m_hitEarliest; 00070 vector<TimeStamp> m_hitLatest; 00071 00072 //Earliest and Latest in the final SimReadoutHeader 00073 TimeStamp m_Earliest; 00074 TimeStamp m_Latest; 00075 00076 //Triggering 00077 vector<string> m_trigToolNames; 00078 vector<ITsTriggerTool*> m_trigTools; 00079 00080 string m_trigFilterName; 00081 ITsTriggerTool* m_triggerSorter; 00082 00083 //Readoutering 00084 vector<string> m_roToolNames; 00085 vector<IROsReadoutTool*> m_roTools; 00086 00087 string m_roTrigPackName; 00088 IROsTriggerDataPackerTool* m_roTrigPackTool; 00089 00090 //Interface in FastMCProduction 00091 ISimHitSplitSvc* m_simHitSplitSvc; 00092 00093 //ElecSim on SimHitHeader, produce ElecHeader 00094 StatusCode ElecSim(const SimHitHeader* shh, int index, ElecHeader*& eh); 00095 00096 //TrigSim on ElecHeader, produce TrigHeader 00097 StatusCode TrigSim(const ElecHeader& eh, SimTrigHeader*& th); 00098 00099 //ReadoutSim on ElecHeader and TrigHeader, produce SimReadoutHeader 00100 StatusCode ReadoutSim(const ElecHeader& eh, const SimTrigHeader& th, SimReadoutHeader*& srh); 00101 00102 //Get the next SimReadoutHeader 00103 StatusCode TrigExecute(const ElecHeader* eh, SimReadoutHeader*& srh); 00104 }; 00105 00106 #endif //DIGITIZEALG_H