00001 #ifndef TRPCREC_H 00002 #define TRPCREC_H 00003 00004 00005 #include <vector> 00006 #include <stdint.h> 00007 00008 #include "TCBMBeamtimeProc.h" 00009 00010 #include "TRocEvent.h" 00011 #include "TRPCParam.h" 00012 00013 #include "TGet4HitUnpacked.h" 00014 00015 class TRpcParam; 00016 class TGo4MbsSubEvent; 00017 class TGet4HitUnpacked; 00018 00019 // Structure with all data field for 1 Get4 chip! 00020 struct TRpcRec { 00021 UInt_t u_nbConsLE[NB_CHAN_GET4]; 00022 UInt_t u_nbConsTE[NB_CHAN_GET4]; 00023 TRocMessageExtended mLastLeading[NB_CHAN_GET4]; // Last leading message / channel 00024 TRocMessageExtended mLastTrailing[NB_CHAN_GET4]; // Last trailing message / channel 00025 00026 // Flags 00027 Bool_t bFirstEpochBlock; 00028 Bool_t bStoredHitUnp; 00029 00030 std::vector<UInt_t> uEpochStart; // Start of each message XX epochs buffer 00031 std::vector<UInt_t> uCycleStart; // Start of each message XX epochs buffer 00032 00033 // Check for Hits Building 00034 TGet4HitUnpacked hitCurrent[NB_CHAN_GET4]; 00035 TGet4HitUnpacked hitLatest[NB_CHAN_GET4]; 00036 00037 // Check for Time ordering of Hits 00038 TGet4HitUnpacked hitCurrentBlock[NB_CHAN_GET4]; 00039 TGet4HitUnpacked hitLatestBlock[NB_CHAN_GET4]; 00040 00041 // Rate variable 00042 Double_t dInstantRateMean[NB_CHAN_GET4]; 00043 Double_t *dInstantRateOld[NB_CHAN_GET4]; 00044 UInt_t uInstantRateCounter[NB_CHAN_GET4]; 00045 00046 UInt_t u_messageCountLastEpoch; 00047 00048 00049 // Histograms 00050 TH1 *fGet4FineTimeLE[NB_CHAN_GET4]; // Finetime of Leading Edge 00051 TH1 *fGet4FineTimeTE[NB_CHAN_GET4]; // Finetime of Trailing Edge 00052 TH1 *fGet4LeDnl[NB_CHAN_GET4]; // DNL value for each bin 00053 TH1 *fGet4LeDnlSum[NB_CHAN_GET4]; // Integral of DNL value up to each bin 00054 TH1 *fGet4TeDnl[NB_CHAN_GET4]; // DNL value for each bin 00055 TH1 *fGet4TeDnlSum[NB_CHAN_GET4]; // Integral of DNL value up to each bin 00056 00057 // Finetime check 00058 UInt_t uNbHitsInEventLE[NB_CHAN_GET4]; // Nb of hits for each channel in this event 00059 UInt_t uNbHitsInEventTE[NB_CHAN_GET4]; // Nb of hits for each channel in this event 00060 TH1 *fGet4FineTimeLE_First[NB_CHAN_GET4]; // Finetime of Leading Edge first hit in event 00061 TH1 *fGet4FineTimeTE_First[NB_CHAN_GET4]; // Finetime of Trailing Edge first hit in event 00062 TH1 *fGet4FineTimeLE_Second[NB_CHAN_GET4]; // Finetime of Leading Edge second hit in event 00063 TH1 *fGet4FineTimeTE_Second[NB_CHAN_GET4]; // Finetime of Trailing Edge Second hit in event 00064 00065 TH1 *fGet4TOT[NB_CHAN_GET4]; // Time over threshold 00066 00067 TH1 *fGet4PulseSpacingClose[NB_CHAN_GET4]; // Pulse spacing between current and last hit, ns range 00068 TH1 *fGet4PulseSpacingMid[NB_CHAN_GET4]; // Pulse spacing between current and last hit, us range 00069 TH1 *fGet4PulseSpacingFar[NB_CHAN_GET4]; // Pulse spacing between current and last hit, s range 00070 TH2 *fGet4InstantRate[NB_CHAN_GET4]; // Instantaneous rate average over 8 or 10 hits 00071 TH1 *fGet4LeSpacingClose[NB_CHAN_GET4]; // Pulse spacing between current and last leading edge, ns range 00072 TH1 *fGet4TeSpacingClose[NB_CHAN_GET4]; // Pulse spacing between current and last trailing edge, ns range 00073 00074 std::vector< TH1 * > fVGetTimeCorrelation; // Time Correlation between two channels 00075 std::vector< TH2 * > fVGetTotCorrelation; // Tot Correlation between two channels 00076 std::vector< TH1 * > fVCheckCorrelation; // Correlation between three channels 00077 std::vector< TH2 * > fVCheckCorrelation4; // Correlation between three channels 00078 00079 TH1 *fGet4RisEdgesNbEvol[NB_CHAN_GET4]; // Nb of rising edges depending on cycle/chan 00080 TH1 *fGet4FalEdgesNbEvol[NB_CHAN_GET4]; // Nb of falling edges depending on cycle/chan 00081 TH1 *fGet4HitsNbEvolution[NB_CHAN_GET4]; // Nb of matched hits depending on cycle/chan 00082 00083 TH1 *fGet4MessValidEpochs; // Nb of Messages in valid Epochs 00084 00085 TH1 *fNbConsecutiveLE[NB_CHAN_GET4]; // Nb of consecutive Leading edges (should stay at 1 or max 2 when multi hits) 00086 TH1 *fNbConsecutiveTE[NB_CHAN_GET4]; // Nb of consecutive Trailing edges (should stay at 1 or max 2 when multi hits) 00087 TH2 *fTestConsecutiveLE[NB_CHAN_GET4]; // Checking id two consecutive leading edges are coming from Hit too close for GET4 00088 // by looking at the time between First edge and previous trailing edge 00089 TH2 *fTestConsecutiveTE[NB_CHAN_GET4]; // Checking id two consecutive trailing edges are coming from Hit too close for GET4 00090 // by looking at the time between First edge and previous leading edge 00091 TH2 *fTest2ConsecutiveLE[NB_CHAN_GET4]; // Checking id two consecutive leading edges are coming from Hit too close for GET4 00092 // by looking at the time between First edge and previous trailing edge 00093 TH2 *fTest2ConsecutiveTE[NB_CHAN_GET4]; // Checking id two consecutive trailing edges are coming from Hit too close for GET4 00094 // by looking at the time between First edge and previous leading edge 00095 00096 TRpcRec(); 00097 }; 00098 00099 #endif // TRPCREC_H