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