00001 #ifndef DaqDataHistogram_H
00002 #define DaqDataHistogram_H
00003
00004
00005 #define MAXMODNUM 21
00006 #define MAXCHNNUM 16
00007
00008 #define NSITES 5
00009 #define NDETECTORS 5
00010 #define NBOARDS 21
00011 #define NCONNECTORS 16
00012 #define NSUM 20
00013 #define NHISTOGRAMS 30
00014
00015 #define MAXHISTS NBOARDS*NCONNECTORS*NHISTOGRAMS
00016
00017
00018 #define NROW 9
00019 #define NCOLUMN 9
00020 #define NRPCHISTOGRAMS 30 // Nor sure about the number
00021
00022 #define MAXRPCHISTS NROW*NCOLUMN*NRPCHISTOGRAMS
00023
00024 class IStatisticsSvc;
00025 class TH1;
00026
00027 namespace DayaBay
00028 {
00029 class Detector;
00030 }
00031
00032 namespace DybDaq {
00033 class FecReadout;
00034 class FecData;
00035 class RtmReadout;
00036 class RtmData;
00037 class EventReadout;
00038 }
00039
00040 #include "GaudiAlg/GaudiAlgorithm.h"
00041 #include <string>
00042
00043 class DaqDataHistogram : public GaudiAlgorithm
00044 {
00045 public:
00046
00047 DaqDataHistogram (const std::string& name,
00048 ISvcLocator* pSvcLocator);
00049 virtual ~DaqDataHistogram ();
00050 virtual StatusCode initialize();
00051 virtual StatusCode finalize();
00052 virtual StatusCode execute();
00053
00054 private:
00055 int daqTrigType(int offTrigType);
00056
00057 private:
00058 IStatisticsSvc* m_statsSvc;
00059
00060 TH1* getOrMakeHist(int run, const DayaBay::Detector &detector,
00061 int board, int connector, int histIndex);
00062 std::string getPath(int run, const DayaBay::Detector &detector,
00063 int board, int connector,
00064 const char* histName);
00065 TH1* m_scale;
00066
00067 std::map<int,TH1**> m_hist;
00068
00069 TH1* rpcGetOrMakeHist(int run, int detector, int row, int column, int histIndex);
00070 std::string rpcGetPath(int run, int detector, int row, int column, const char* histName);
00071
00072 std::map<int, TH1**> m_rpcHist;
00073 std::map<int, std::string> m_rpcHistPath;
00074
00075 void handleFecReadout(const DybDaq::FecReadout& fecReadout);
00076 void handleFecData(const DybDaq::FecData* fecData);
00077
00078 void handleRtmReadout(const DybDaq::RtmReadout& rtmReadout);
00079 void handleRtmData(const DybDaq::RtmData* rtmData);
00080
00081 bool m_daqCrateOrNot;
00082
00083
00084 int m_printFreq;
00085 int m_adcSumMax;
00086 double m_highGainFactor;
00087 double m_tIntervalMax;
00088
00089 double m_firstTriggerTime;
00090 double m_lastTriggerTime;
00091
00092 unsigned long m_eventCount;
00093
00094 enum Fig_t {
00095
00096 kTdc,
00097 kAdcFine,
00098 kAdcCoarse,
00099 kPeakCycle,
00100 kRange,
00101 kHitCount,
00102 kPreAdcFine,
00103 kPreAdcCoarse,
00104 kDarkNoise,
00105
00106 kTriggerType,
00107 kRateVsTriggerType,
00108 kAdcSum,
00109 kNchannel,
00110 kHitRate,
00111 kHitNumber,
00112 kAdcMean,
00113 kAdcRMS,
00114 kTdcMean,
00115 kTdcRMS,
00116 kPreAdcMean,
00117 kPreAdcRMS,
00118 kAdcVsChannel,
00119 kTdcVsChannel,
00120 kPreAdcVsChannel,
00121 kDarkRate,
00122 kDarkNoiseVsChannel,
00123 kAdcSumVsTriggerType
00124 };
00125
00126 enum rpcFig_t {
00127 kFecId,
00128 kHitMap
00129 };
00130 };
00131 #endif
00132