// CalHit.h // Jan 1999 Daniel Flath - ROOT HTML comments added // Dec 1999 Daniel Flath - Rewritten for GLAST // Oct 25,1999 Richard Dubois Clone from LCD version #ifndef CALHIT_H #define CALHIT_H #include "LogID.h" #include "TObject.h" #include "TObjArray.h" #include "EDeposit.h" class CalHit: public TObject { private: /* ADC word layout (defined in following enum): _______________________________________________ |15| | | | | | | | | | |04|03|02|01|00| |__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__| | Value | ID |PN|RS| |___________________________________|_____|__|__| ***** NOTES: ***** PN == Pin RS == Range Scale */ enum { ADC_K_RS = 1, ADC_V_RS = 0, ADC_M_RS = ((1 << ADC_K_RS) - 1), ADC_K_PIN = 1, ADC_V_PIN = (ADC_K_RS + ADC_V_RS), ADC_M_PIN = ((1 << ADC_K_PIN) - 1), ADC_K_ID = 2, ADC_V_ID = (ADC_K_PIN + ADC_V_PIN), ADC_M_ID = ((1 << ADC_K_ID) - 1), ADC_K_VAL = 12, ADC_V_VAL = (ADC_K_ID + ADC_V_ID), ADC_M_VAL = ((1 << ADC_K_VAL) - 1), }; LogID* m_log; // Log identity info class // UShort_t ADCValues[2][4]; UShort_t ADCValues[8]; inline static UShort_t getADCValue(UShort_t adcWord) { return (adcWord >> ADC_V_VAL) & ADC_M_VAL; }; inline static UShort_t getADCID(UShort_t adcWord) { return (adcWord >> ADC_V_ID) & ADC_M_ID; }; inline static UShort_t getADCPinID(UShort_t adcWord) { return (adcWord >> ADC_V_PIN) & ADC_M_PIN; }; inline static UShort_t getADCRangeScale(UShort_t adcWord) { return (adcWord >> ADC_V_RS) & ADC_M_RS; }; public: // Enumeration of ADC gain values // (Should be identical to that found in CalorimeterRawStore.h) typedef enum { LowEnX4 = 0, LowEn, HiEnX8, HiEn } ADCGain; typedef enum { Pos = 0, Neg } LogEnd; UShort_t getADCValue(LogEnd end, ADCGain gain = LowEnX4) const { return getADCValue(ADCValues[end * 4 + gain]); // return getADCValue(ADCValues[end][gain]); }; UShort_t getADCID(LogEnd end, ADCGain gain = LowEnX4) const { return getADCID(ADCValues[end * 4 + gain]); // return getADCID(ADCValues[end][gain]); }; UShort_t getADCPinID(LogEnd end, ADCGain gain = LowEnX4) const { return getADCPinID(ADCValues[end * 4 + gain]); // return getADCPinID(ADCValues[end][gain]); }; UShort_t getADCRangeScale(LogEnd end, ADCGain gain = LowEnX4) const { return getADCRangeScale(ADCValues[end * 4 + gain]); // return getADCRangeScale(ADCValues[end][gain]); }; Bool_t setADCValue(UShort_t newVal, LogEnd end, ADCGain gain = LowEnX4); Bool_t setADCID(UShort_t newVal, LogEnd end, ADCGain gain = LowEnX4); Bool_t setADCPinID(UShort_t newVal, LogEnd end, ADCGain gain = LowEnX4); Bool_t setADCRangeScale(UShort_t newVal, LogEnd end, ADCGain gain = LowEnX4); inline void setADCWord(UShort_t newVal, LogEnd end, ADCGain gain = LowEnX4) { ADCValues[end * 4 + gain] = newVal; }; CalHit(); CalHit(LogID* log); ~CalHit(); inline LogID* getLogID(){ return m_log; }; void Clean(); ClassDef(CalHit,1) // Information for a single CsI Log }; #endif