Go to the documentation of this file.00001 #ifndef TMBSCRATEEVENT_H
00002 #define TMBSCRATEEVENT_H
00003
00004 #include "TGo4EventElement.h"
00005
00006 #include "T1290Data.h"
00007
00008
00009 #include <stdint.h>
00010
00011
00012
00013
00014
00015
00016 #define MAX_1182 2
00017
00018 #define NUM_1182_CH 8
00019
00020
00021 #define MAX_1290 8
00022
00023
00024 #define MAX_965 3
00025
00026
00027 #define MAX_FPGA_TDC 7
00028
00029
00030
00031 #define VERSION_VFTX_28 // <- August 2012 version based on VFTX board (56 chan, 28 true chan+tot)
00032
00033
00034 #ifdef VERSION_VFTX
00035 #define FPGA_TDC_NBCHAN 32
00036 #elif defined VERSION_VFTX_28
00037 #define FPGA_TDC_NBCHAN 56
00038 #else
00039 #define FPGA_TDC_NBCHAN 8
00040 #endif
00041
00042
00043 #define TDC_EVT_HEADER_KEY_MASK 0xFFFF0000
00044 #define TDC_EVT_HEADER_KEY_SHIFT 16
00045 #define TDC_EVT_HEADER_KEYWORD 0xABCD
00046 #define TDC_EVT_HEADER_MOD_MASK 0x0000FF00
00047 #define TDC_EVT_HEADER_MOD_SHIFT 8
00048 #define TDC_EVT_HEADER_NB_MASK 0x000000FF
00049
00050
00051 #ifdef OLD_VERSION_VULOM
00052 #define TDC_FIFO_FINE_CT 0x000003FF
00053 #define TDC_FIFO_COARSE_CT 0x01FFFC00 // Coarse counter value
00054 #define TDC_FIFO_COARSE_CT_SHIFT 10
00055 #define TDC_FIFO_COARSE_FT_SHIFT 0
00056 #define TDC_FIFO_FUTURE_BIT 0x02000000 // Flag for hits after trigger
00057 #define TDC_FIFO_FUTURE_BIT_SHIFT 25
00058 #define TDC_FIFO_DATA_CHAN 0x7C000000
00059 #define TDC_FIFO_DATA_CHAN_SHIFT 26
00060 #elif defined VERSION_VFTX
00061 #define TDC_FIFO_FINE_CT 0x000007FF
00062 #define TDC_FIFO_COARSE_CT 0x01FFF800 // Coarse counter value
00063 #define TDC_FIFO_COARSE_CT_SHIFT 11
00064 #define TDC_FIFO_COARSE_FT_SHIFT 0
00065 #define TDC_FIFO_FUTURE_BIT 0x02000000 // Flag for hits after trigger
00066 #define TDC_FIFO_FUTURE_BIT_SHIFT 25
00067 #define TDC_FIFO_DATA_CHAN 0x7C000000 // Channel number
00068 #define TDC_FIFO_DATA_CHAN_SHIFT 26
00069 #elif defined VERSION_VFTX_28
00070 #define TDC_FIFO_FINE_CT 0x000007FF
00071 #define TDC_FIFO_COARSE_CT 0x00FFF800 // Coarse counter value
00072 #define TDC_FIFO_COARSE_CT_SHIFT 11
00073 #define TDC_FIFO_COARSE_FT_SHIFT 0
00074 #define TDC_FIFO_FUTURE_BIT 0x01000000 // Flag for hits after trigger
00075 #define TDC_FIFO_FUTURE_BIT_SHIFT 24
00076 #define TDC_FIFO_DATA_CHAN 0x7E000000 // Channel number
00077 #define TDC_FIFO_DATA_CHAN_SHIFT 25
00078 #else
00079 #define TDC_FIFO_FINE_CT 0x000007FF
00080 #define TDC_FIFO_COARSE_CT 0x03FFF800 // Coarse counter value
00081 #define TDC_FIFO_COARSE_CT_SHIFT 11
00082 #define TDC_FIFO_COARSE_FT_SHIFT 0
00083 #define TDC_FIFO_FUTURE_BIT 0x04000000 // Flag for hits after trigger
00084 #define TDC_FIFO_FUTURE_BIT_SHIFT 26
00085 #define TDC_FIFO_DATA_CHAN 0x78000000
00086 #define TDC_FIFO_DATA_CHAN_SHIFT 27
00087 #endif
00088
00089 #ifdef OLD_VERSION_VULOM
00090 #define TDC_FIFO_HEADER_DATA_CNT 0x000000FF // Data count
00091 #define TDC_FIFO_HEADER_TRIG_TIME 0x01FFFC00 // Coarse counter value
00092 #define TDC_FIFO_HEADER_TRIG_TIME_SHIFT 10
00093 #define TDC_FIFO_HEADER_TRIG_TYPE 0x60000000 // Trigger Type
00094 #define TDC_FIFO_HEADER_TRIG_TYPE_SHIFT 29
00095 #define TDC_FIFO_MESSAGE_TYPE 0x80000000 // Message Type
00096 #define TDC_FIFO_MESSAGE_TYPE_SHIFT 31 // (1 = header, 0 = data)
00097 #elif defined VERSION_VFTX
00098 #define TDC_FIFO_HEADER_DATA_CNT 0x000000FF // Data count
00099 #define TDC_FIFO_HEADER_TRIG_TIME 0x01FFF800 // Coarse counter value
00100 #define TDC_FIFO_HEADER_TRIG_TIME_SHIFT 11
00101 #define TDC_FIFO_HEADER_TRIG_TYPE 0x60000000 // Trigger Type
00102 #define TDC_FIFO_HEADER_TRIG_TYPE_SHIFT 29
00103 #define TDC_FIFO_MESSAGE_TYPE 0x80000000 // Message Type
00104 #define TDC_FIFO_MESSAGE_TYPE_SHIFT 31 // (1 = header, 0 = data)
00105 #elif defined VERSION_VFTX_28
00106 #define TDC_FIFO_HEADER_DATA_CNT 0x000000FF // Data count
00107 #define TDC_FIFO_HEADER_TRIG_TIME 0x00FFF800 // Coarse counter value
00108 #define TDC_FIFO_HEADER_TRIG_TIME_SHIFT 11
00109 #define TDC_FIFO_HEADER_TRIG_TYPE 0x60000000 // Trigger Type
00110 #define TDC_FIFO_HEADER_TRIG_TYPE_SHIFT 29
00111 #define TDC_FIFO_MESSAGE_TYPE 0x80000000 // Message Type
00112 #define TDC_FIFO_MESSAGE_TYPE_SHIFT 31 // (1 = header, 0 = data)
00113 #else
00114 #define TDC_FIFO_HEADER_DATA_CNT 0x000000FF // Data count
00115 #define TDC_FIFO_HEADER_TRIG_TIME 0x03FFF800 // Coarse counter value
00116 #define TDC_FIFO_HEADER_TRIG_TIME_SHIFT 11
00117 #define TDC_FIFO_HEADER_TRIG_TYPE 0x60000000 // Trigger Type
00118 #define TDC_FIFO_HEADER_TRIG_TYPE_SHIFT 29
00119 #define TDC_FIFO_MESSAGE_TYPE 0x80000000 // Message Type
00120 #define TDC_FIFO_MESSAGE_TYPE_SHIFT 31 // (1 = header, 0 = data)
00121 #endif
00122
00123
00124
00125
00126 #define SCALORMU_NB_SCAL 16
00127
00128 class MQDC_t: public TObject {
00129 public:
00130 enum {NumChan = 16 };
00131
00132 Int_t charge[NumChan];
00133 Int_t range[NumChan];
00134 Int_t under[NumChan];
00135 Int_t over[NumChan];
00136
00137 MQDC_t() : TObject() { Clear(); };
00138
00139 void Clear(void);
00140
00141 void Unpack(int* pdata, unsigned len, int expected_geo = 0);
00142
00143 static int FindGeo(int* pdata, int *len, int *crate);
00144
00145 ClassDef(MQDC_t, 1)
00146 };
00147
00148 struct FPGA_TDC_hit {
00149 uint32_t ch_ix;
00150 uint32_t coarse_ct;
00151 uint32_t ch_tim;
00152 uint32_t future_bit;
00153
00154 FPGA_TDC_hit() : ch_ix(0), coarse_ct(0), ch_tim(0), future_bit(0) {}
00155
00156
00157 FPGA_TDC_hit(const FPGA_TDC_hit& src) :
00158 ch_ix(src.ch_ix), coarse_ct(src.coarse_ct), ch_tim(src.ch_tim), future_bit(src.future_bit) {}
00159 };
00160
00161
00162 struct FPGA_TDC_header {
00163 uint32_t mod_nr;
00164 uint32_t nr_data;
00165 uint32_t fpga_fifo_tt;
00166 uint32_t fpga_fifo_ct;
00167 uint32_t fpga_fifo_nd;
00168
00169
00170 FPGA_TDC_header() : mod_nr(0), nr_data(0), fpga_fifo_tt(0), fpga_fifo_ct(0), fpga_fifo_nd(0) {}
00171
00172
00173 FPGA_TDC_header(const FPGA_TDC_header& src) :
00174 mod_nr(src.mod_nr), nr_data(src.nr_data), fpga_fifo_tt(src.fpga_fifo_tt), fpga_fifo_ct(src.fpga_fifo_ct), fpga_fifo_nd(src.fpga_fifo_nd) {}
00175 };
00176
00177 struct QFW_Data {
00178 uint32_t counters[4];
00179 uint32_t errcnt[4];
00180 uint32_t setup;
00181
00182 QFW_Data()
00183 {
00184 for (int n=0;n<4;n++) { counters[n] = 0; errcnt[n] = 0; }
00185 setup = 0;
00186 }
00187
00188 QFW_Data(const QFW_Data& src)
00189 {
00190 for (int n=0;n<4;n++) {
00191 counters[n] = src.counters[n];
00192 errcnt[n] = src.errcnt[n];
00193 }
00194 setup = src.setup;
00195 }
00196 };
00197
00198 struct ScalOrMu_Data {
00199 UInt_t uScaler[SCALORMU_NB_SCAL];
00200
00201 ScalOrMu_Data()
00202 {
00203 for( Int_t iScalerInd=0; iScalerInd < SCALORMU_NB_SCAL; iScalerInd++)
00204 uScaler[iScalerInd] = 0;
00205 }
00206
00207 ScalOrMu_Data(const ScalOrMu_Data& src)
00208 {
00209 for( Int_t iScalerInd=0; iScalerInd < SCALORMU_NB_SCAL; iScalerInd++)
00210 uScaler[iScalerInd] = src.uScaler[iScalerInd];
00211 }
00212 };
00213
00214 class TMbsCrateEvent : public TGo4EventElement {
00215
00216 public:
00217
00218 TMbsCrateEvent();
00219 TMbsCrateEvent(const char* name, Short_t id=0);
00220 virtual ~TMbsCrateEvent();
00221
00223 virtual void Clear(Option_t *t="");
00224
00225
00226 UShort_t fData1182[MAX_1182][NUM_1182_CH];
00227
00229 T1290Data fMtdc[MAX_1290];
00230
00232 MQDC_t fMqdc[MAX_965];
00233
00235 std::vector<FPGA_TDC_hit> fFPGA[MAX_FPGA_TDC];
00236
00238 std::vector<FPGA_TDC_header> fFPGAHEAD[MAX_FPGA_TDC];
00239
00241 QFW_Data fQFW;
00242
00244 ScalOrMu_Data fScalOrMu;
00245
00246 ClassDef(TMbsCrateEvent,3)
00247 };
00248
00249 #endif //TEVENT_H
00250