• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

beamtime/gsi-aug12/hd/go4/TMbsCrateEvent.h (r4864/r3215)

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  * Put all definitions here and use them in processor,
00012  * since they are necessary for data structure of event
00013  */
00014 
00015 // number of LeCroy 1182 modules
00016 #define MAX_1182 2
00017 // number of channels in LeCroy 1182 modules
00018 #define NUM_1182_CH 8
00019 
00020 // number of 1290 TDC modules
00021 #define MAX_1290 8
00022 
00023 // number of 965 QDC Modules
00024 #define MAX_965 3
00025 
00026 // number of FPGA TDC modules
00027 #define MAX_FPGA_TDC 7
00028 
00029 //#define OLD_VERSION_VULOM // <- Pre-COSY nov11 HD vulom FPGA code
00030 //#define VERSION_VFTX    // <- June   2012 version based on VFTX board (32 chan, 16 true chan+tot)
00031 #define VERSION_VFTX_28 // <- August 2012 version based on VFTX board (56 chan, 28 true chan+tot)
00032 
00033 // number of channels in FPGA TDC modules
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 /******************** FPGA TDC data unpacking definitions *************/
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 /**************** End FPGA TDC data unpacking definitions *************/
00124 
00125 // Number of scalers in ScalOrMu
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    // default constructor
00154    FPGA_TDC_hit() : ch_ix(0), coarse_ct(0), ch_tim(0), future_bit(0) {}
00155 
00156    // copy constructor, used by vector to copy content
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    // default constructor
00170    FPGA_TDC_header() : mod_nr(0), nr_data(0), fpga_fifo_tt(0), fpga_fifo_ct(0), fpga_fifo_nd(0) {}
00171 
00172    // copy constructor, used by vector to copy content
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       /* Data of 1182 QDC*/
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 

Generated on Tue Dec 10 2013 04:52:17 for ROCsoft by  doxygen 1.7.1