00001 #ifndef GL3EMC_H
00002 #define GL3EMC_H
00003
00004
00005 #ifndef TRG_VERSION
00006 #define TRG_VERSION 0x32
00007 #endif
00008
00009 #include "daqFormats.h"
00010 #include "gl3Track.h"
00011 #include "l3EmcCalibration.h"
00012 #ifdef OLD_DAQ_READER
00013 #include <evpReader.hh>
00014 #else
00015 #include <DAQ_READER/daqReader.h>
00016 #endif
00017
00018 class gl3Event;
00019
00020 class gl3EmcTower {
00021
00022 public:
00023 inline int getADC() { return adc; }
00024 inline float getEnergy() { return energy; }
00025 inline int getNTracks() { return nTracks; }
00026
00027 inline void setADC(int x) {
00028 adc = x;
00029
00030 if(info->getGain() <= 0)
00031 energy = 0.;
00032 else if(adc==0)
00033 energy = 0.;
00034 else
00035 energy = (adc - info->getPed())*info->getGain();
00036 }
00037
00038 inline void setNTracks(int x) { nTracks = x; }
00039 inline void incrNTracks() { nTracks++; }
00040
00041 inline l3EmcTowerInfo *getTowerInfo() { return info; }
00042 inline void setTowerInfo(l3EmcTowerInfo *_info) {
00043 info = _info;
00044 }
00045
00046 private:
00047 int adc;
00048 float energy;
00049 int nTracks;
00050
00051 l3EmcTowerInfo *info;
00052 };
00053
00054 class gl3EMC {
00055 public:
00056 gl3EMC(l3EmcCalibration *BarrelCalib, l3EmcCalibration *EndcapCalib=NULL);
00057 ~gl3EMC();
00058
00059
00060 #ifdef OLD_DAQ_READER
00061 int readFromEvpReader(evpReader *evp, char *mem);
00062 #else
00063 int readFromEvpReader(daqReader *rdr, char *mem);
00064 #endif
00065
00066 int readEMCSECP(EMCSECP* secp);
00067 int readRawData(L3_P *l3p);
00068 int matchTracks(gl3Event *event);
00069
00070 void reset();
00071
00072 inline float getEtotal() { return Etotal;};
00073 inline float getBarrelEnergy() { return Ebarrel;};
00074 inline float getEndcapEnergy() { return Eendcap;};
00075
00076 inline int getErrFlags() { return errFlags; }
00077
00078 inline int getNTowers() { return nTotalTowers; }
00079
00080 inline gl3EmcTower* getTower(int twr) {
00081 return &tower[twr];
00082 }
00083
00084 inline int getNBarrelTowers() { return nBarrelTowers; }
00085
00086 inline gl3EmcTower* getBarrelTower(int twr) {
00087 return &tower[twr];
00088 }
00089
00090 inline int getNEndcapTowers() { return nEndcapTowers; }
00091
00092 inline gl3EmcTower* getEndcapTower(int twr) {
00093 return &tower[twr+getNBarrelTowers()];
00094 }
00095
00096
00097
00098
00099
00100
00101
00102 private:
00103 int nBarrelTowers;
00104 int nEndcapTowers;
00105 int nTotalTowers;
00106
00107 gl3EmcTower *tower;
00108 gl3EmcTower *barrelTower;
00109 gl3EmcTower *endcapTower;
00110
00111 float Etotal, Ebarrel, Eendcap;
00112
00113 unsigned int errFlags;
00114
00115 l3EmcCalibration *barrelCalib;
00116 l3EmcCalibration *endcapCalib;
00117 };
00118
00119
00120
00121 #endif