00001 #ifndef RawData2Tree_H 00002 #define RawData2Tree_H 00003 00004 #include "GaudiAlg/GaudiAlgorithm.h" 00005 #include "GaudiKernel/NTuple.h" 00006 #include "Context/TimeStamp.h" 00007 00008 class IPmtGeomInfoSvc; 00009 class ICableSvc; 00010 class TimeStamp; 00011 namespace DayaBay { 00012 class ReadoutHeader; 00013 class DaqCrate; 00014 } 00015 00016 class RawData2Tree: public GaudiAlgorithm 00017 { 00018 public: 00020 RawData2Tree(const std::string& name, ISvcLocator* svcloc); 00021 virtual ~RawData2Tree(); 00022 00024 StatusCode initialize(); 00025 StatusCode execute(); 00026 StatusCode finalize(); 00027 00028 private: 00029 StatusCode bookNtuple(); 00030 void processPmtCrate(const DayaBay::ReadoutHeader *roh, const DayaBay::DaqCrate *daqCrate); 00031 //void processRpcCrate(const DayaBay::ReadoutHeader *roh, DayaBay::DaqCrate *daqCrate){}; 00032 void processReadout(const DayaBay::ReadoutHeader *roh); 00033 00034 private: 00035 int m_printFreq; 00036 int m_execNum; 00037 bool m_checkGen; 00038 bool m_checkReadout; 00039 00040 private: 00041 NTuple::Tuple* m_ntuple0; //Gen 00042 NTuple::Item<long> m_eventType; 00043 NTuple::Item<long> m_nVertex; 00044 NTuple::Array<float> m_verX0; 00045 NTuple::Array<float> m_verY0; 00046 NTuple::Array<float> m_verZ0; 00047 NTuple::Item<long> m_nParticle; 00048 NTuple::Array<float> m_verPx; 00049 NTuple::Array<float> m_verPy; 00050 NTuple::Array<float> m_verPz; 00051 00052 NTuple::Tuple* m_ntuple1; //Readout 00053 NTuple::Item<long> m_run; 00054 NTuple::Item<long> m_event; 00055 NTuple::Item<long> m_det; 00056 NTuple::Item<long> m_trigNum; 00057 NTuple::Item<long> m_trigSecond; 00058 NTuple::Item<long> m_trigNanoSec; 00059 NTuple::Item<long> m_trigType; 00060 NTuple::Item<long> m_nHit; 00061 NTuple::Item<long> m_nChannel; 00062 NTuple::Item<long> m_nTrigger; 00063 NTuple::Array<long> m_board; 00064 NTuple::Array<long> m_channel; 00065 NTuple::Array<long> m_ring; 00066 NTuple::Array<long> m_column; 00067 NTuple::Array<long> m_wall; 00068 NTuple::Array<long> m_spot; 00069 NTuple::Array<long> m_inout;; 00070 NTuple::Array<long> m_adc; 00071 NTuple::Array<long> m_tdc; 00072 NTuple::Array<long> m_cycle; 00073 NTuple::Array<long> m_preAdc; 00074 NTuple::Array<long> m_range; 00075 NTuple::Array<long> m_hitCount; 00076 NTuple::Array<long> m_multiTdc; 00077 NTuple::Array<long> m_triggerSec; 00078 NTuple::Array<long> m_triggerNano; 00079 NTuple::Array<long> m_triggerType; 00080 NTuple::Array<long> m_triggerHSum; 00081 NTuple::Array<long> m_triggerESumComp; 00082 NTuple::Array<long> m_triggerESumAdc; 00083 00084 private: 00085 // Property CableSvcName - Name of the cable service 00086 std::string m_cableSvcName; 00087 00088 //CableSvc 00089 ICableSvc* m_cableSvc; 00090 00091 // Property PmtGeomSvcName - Name of the PmtGeom service 00092 std::string m_pmtGeomSvcName; 00093 00094 // Pmt Geometry Information Service 00095 IPmtGeomInfoSvc* m_pmtGeomSvc; 00096 00097 }; 00098 00099 #endif