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:
00072 enum {
00073 ADC_K_RS = 1,
00074 ADC_V_RS = 0,
00075 ADC_M_RS = ((1 << ADC_K_RS) - 1),
00076
00077 ADC_K_PIN = 1,
00078 ADC_V_PIN = (ADC_K_RS + ADC_V_RS),
00079 ADC_M_PIN = ((1 << ADC_K_PIN) - 1),
00080
00081 ADC_K_ID = 2,
00082 ADC_V_ID = (ADC_K_PIN + ADC_V_PIN),
00083 ADC_M_ID = ((1 << ADC_K_ID) - 1),
00084
00085 ADC_K_VAL = 12,
00086 ADC_V_VAL = (ADC_K_ID + ADC_V_ID),
00087 ADC_M_VAL = ((1 << ADC_K_VAL) - 1),
00088 };
00089
00090
00091
00092 LogId m_log;
00093
00094
00095 UShort_t m_AdcValues[8];
00096
00098 static CalTrigMode m_mode;
00099
00100
00101 inline static UShort_t getAdc(UShort_t adcWord) {
00102 return (adcWord >> ADC_V_VAL) & ADC_M_VAL;
00103 };
00104 inline static UShort_t getAdcId(UShort_t adcWord) {
00105 return (adcWord >> ADC_V_ID) & ADC_M_ID;
00106 };
00107 inline static UShort_t getAdcPinId(UShort_t adcWord) {
00108 return (adcWord >> ADC_V_PIN) & ADC_M_PIN;
00109 };
00110 inline static UShort_t getAdcRangeScale(UShort_t adcWord) {
00111 return (adcWord >> ADC_V_RS) & ADC_M_RS;
00112 };
00113
00114 inline static UShort_t getAdcRange(UShort_t adcWord) {
00115 UShort_t rangeScale = getAdcRangeScale(adcWord);
00116 UShort_t pinId = getAdcPinId(adcWord);
00117 return( (pinId << 1 | rangeScale) );
00118 }
00119
00120
00121 public:
00122
00123 UShort_t getAdc(LogFace face, short index) const {
00124 return ( ((face*4+index) < 8) ? getAdc(m_AdcValues[face * 4 + index]) : 0);
00125 };
00127 UShort_t getAdcSelectedRange(LogFace face, AdcRange range = LowEnX4) const {
00128 return ( ((face*4 + range) < 8) ? getAdc(m_AdcValues[face * 4 + range]) : 0);
00129 };
00130
00131
00132
00133
00134
00135
00136
00137
00138 UShort_t getRange(LogFace face, short index) const {
00139 return getAdcRange(m_AdcValues[face * 4 + index]);
00140 };
00141
00143 inline const CalTrigMode getMode() const { return m_mode; };
00144
00145
00146 Bool_t setAdcValue(UShort_t newVal, LogFace face, AdcRange range = LowEnX4);
00147 Bool_t setAdcId(UShort_t newVal, LogFace face, AdcRange range = LowEnX4);
00148 Bool_t setAdcPinId(UShort_t newVal, LogFace face, AdcRange range = LowEnX4);
00149 Bool_t setAdcRangeScale(UShort_t newVal, LogFace face, AdcRange range = LowEnX4);
00150 inline void setAdcWord(UShort_t newVal, LogFace face, AdcRange range = LowEnX4) {
00151 m_AdcValues[face * 4 + range] = newVal;
00152 };
00153 inline void setTriggerMode(CalTrigMode val) { m_mode = val; };
00154
00155
00156 inline LogId* getLogId() { return &m_log; };
00157
00158
00159 ClassDef(CalLog,3)
00160 };
00161
00162 #endif
00163