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

beamtime/gsi-aug12/get4v10/go4/MBSUNPACK/TMbsCrateEvent.h (r4864/r3846)

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 // V1290 bin size
00024 //#define CAENBINSIZE  25.0/1024.0
00025 
00026 // number of 965 QDC Modules
00027 #define MAX_965 3
00028 
00029 // number of FPGA TDC modules
00030 #define MAX_FPGA_TDC 11
00031 
00032 //#define OLD_VERSION_VULOM // <- Pre-COSY nov11 HD vulom FPGA code
00033 //#define VERSION_VFTX    // <- June   2012 version based on VFTX board (32 chan, 16 true chan+tot)
00034 #define VERSION_VFTX_28 // <- August 2012 version based on VFTX board (56 chan, 28 true chan+tot)
00035 
00036 // number of channels in FPGA TDC modules
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 /******************** FPGA TDC data unpacking definitions *************/
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 /**************** End FPGA TDC data unpacking definitions *************/
00127 
00128 // Number of scalers in ScalOrMu
00129    // Oct12
00130 //#define SCALORMU_NB_SCAL    16
00131    // Nov 12
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    // default constructor
00160    FPGA_TDC_hit() : ch_ix(0), coarse_ct(0), ch_tim(0), future_bit(0) {}
00161 
00162    // copy constructor, used by vector to copy content
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    // default constructor
00176    FPGA_TDC_header() : mod_nr(0), nr_data(0), fpga_fifo_tt(0), fpga_fifo_ct(0), fpga_fifo_nd(0) {}
00177 
00178    // copy constructor, used by vector to copy content
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       /* Data of 1182 QDC*/
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       /* Triglog input pattern*/
00256       UInt_t fTriglogInputPattern;
00257       /* Internal 781250 Hz reference clock for rates calculation */
00258       UInt_t fTriglogReferenceClock;
00259 
00260    ClassDef(TMbsCrateEvent,3)
00261 };
00262 
00263 #endif //TEVENT_H
00264 

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