00001
00002 #ifndef CalLog_H
00003 #define CalLog_H
00004
00005 #include "LogId.h"
00006 #include "TObject.h"
00007
00023 class CalLog: public TObject {
00024 public:
00025
00026 CalLog();
00027 CalLog(LogId &id);
00028 virtual ~CalLog();
00030 Int_t Compare(const TObject *obj) const;
00031 Bool_t IsSortable() const;
00032
00033
00034
00035 typedef enum {
00036 LowEnX4 = 0,
00037 LowEnX1,
00038 HiEnX8,
00039 HiEnX1
00040 } AdcRange;
00041
00042 typedef enum {
00043 POS = 0,
00044 NEG
00045 } LogFace;
00046
00047 typedef enum
00048 {
00049 BESTRANGE = 0,
00050 ALLRANGE = 2
00051 } CalTrigMode;
00052
00053 private:
00070 enum {
00071 ADC_K_RS = 1,
00072 ADC_V_RS = 0,
00073 ADC_M_RS = ((1 << ADC_K_RS) - 1),
00074
00075 ADC_K_PIN = 1,
00076 ADC_V_PIN = (ADC_K_RS + ADC_V_RS),
00077 ADC_M_PIN = ((1 << ADC_K_PIN) - 1),
00078
00079 ADC_K_ID = 2,
00080 ADC_V_ID = (ADC_K_PIN + ADC_V_PIN),
00081 ADC_M_ID = ((1 << ADC_K_ID) - 1),
00082
00083 ADC_K_VAL = 12,
00084 ADC_V_VAL = (ADC_K_ID + ADC_V_ID),
00085 ADC_M_VAL = ((1 << ADC_K_VAL) - 1),
00086 };
00087
00088
00089
00090 LogId m_log;
00091
00092
00093 UShort_t m_AdcValues[8];
00094
00096 static CalTrigMode m_mode;
00097
00098
00099 inline static UShort_t getAdc(UShort_t adcWord) {
00100 return (adcWord >> ADC_V_VAL) & ADC_M_VAL;
00101 };
00102 inline static UShort_t getAdcId(UShort_t adcWord) {
00103 return (adcWord >> ADC_V_ID) & ADC_M_ID;
00104 };
00105 inline static UShort_t getAdcPinId(UShort_t adcWord) {
00106 return (adcWord >> ADC_V_PIN) & ADC_M_PIN;
00107 };
00108 inline static UShort_t getAdcRangeScale(UShort_t adcWord) {
00109 return (adcWord >> ADC_V_RS) & ADC_M_RS;
00110 };
00111
00112 inline static UShort_t getAdcRange(UShort_t adcWord) {
00113 UShort_t rangeScale = getAdcRangeScale(adcWord);
00114 UShort_t pinId = getAdcPinId(adcWord);
00115 return( (pinId << 1 | rangeScale) );
00116 }
00117
00118
00119 public:
00120
00121 UShort_t getAdc(LogFace face, short index) const {
00122 return ( ((face*4+index) < 8) ? getAdc(m_AdcValues[face * 4 + index]) : 0);
00123 };
00125 UShort_t getAdcSelectedRange(LogFace face, AdcRange range = LowEnX4) const {
00126 return ( ((face*4 + range) < 8) ? getAdc(m_AdcValues[face * 4 + range]) : 0);
00127 };
00128
00129
00130
00131
00132
00133
00134
00135
00136 UShort_t getRange(LogFace face, short index) const {
00137 return getAdcRange(m_AdcValues[face * 4 + index]);
00138 };
00139
00141 inline const CalTrigMode getMode() const { return m_mode; };
00142
00143
00144 Bool_t setAdcValue(UShort_t newVal, LogFace face, AdcRange range = LowEnX4);
00145 Bool_t setAdcId(UShort_t newVal, LogFace face, AdcRange range = LowEnX4);
00146 Bool_t setAdcPinId(UShort_t newVal, LogFace face, AdcRange range = LowEnX4);
00147 Bool_t setAdcRangeScale(UShort_t newVal, LogFace face, AdcRange range = LowEnX4);
00148 inline void setAdcWord(UShort_t newVal, LogFace face, AdcRange range = LowEnX4) {
00149 m_AdcValues[face * 4 + range] = newVal;
00150 };
00151 inline void setTriggerMode(CalTrigMode val) { m_mode = val; };
00152
00153
00154 inline LogId* getLogId() { return &m_log; };
00155
00156
00157 ClassDef(CalLog,3)
00158 };
00159
00160 #endif
00161