Go to the documentation of this file.00001 #ifndef _TTrbUNPACKPROCESSOR_H_
00002 #define _TTrbUNPACKPROCESSOR_H_
00003
00004 #include "TCBMBeamtimeProc.h"
00005 #include "TTrbEvent.h"
00006 #include "TTrbParam.h"
00007 #include "TTrbSource.h"
00008
00009 #include "TH1.h"
00010 #include "TH2.h"
00011 #include "TGo4WinCond.h"
00012
00013 class TTrbProc : public TCBMBeamtimeProc
00014 {
00015 public:
00016 TTrbProc ();
00017 TTrbProc (const char* name);
00018 virtual ~TTrbProc ();
00019
00020 virtual void InitEvent (TGo4EventElement* evt);
00021 virtual void ProcessSubevent (TGo4MbsSubEvent* subevt);
00022
00023 protected:
00025 void ProcessTrbSubevent (Trb_Subevent* sub);
00026
00028 void ResetTDCV3TriggerTimes();
00029
00031 void ProcessTDCV3 (Trb_Subevent* sub);
00032
00034 void EvaluateTDCV3Data (UShort_t board=0);
00035
00037 void DumpData (Trb_Subevent* hadsubevent);
00038
00040 inline Bool_t IsAnyCalibration() const
00041 { return fPar ? fPar->generalCalibration || fPar->continuousCalibration : kFALSE; }
00042
00044 inline Bool_t WithoutCalibration() const
00045 { return fPar ? !fPar->generalCalibration && !fPar->continuousCalibration : kTRUE; }
00046
00048 inline double GetLinearFineCalibration(unsigned fine_cnt)
00049 {
00050 return (fine_cnt<20) ? 0. : ((fine_cnt>500) ? 5. : (fine_cnt-20)/480.*5.);
00051 }
00052
00053 private:
00056 TH1* hTDCDataVolume;
00057 TH1* hSubevSize;
00058 bool fCanAssignTrigger;
00059 bool fCurrentTriggerType;
00060
00061 unsigned fLastTriggerId;
00062 int fLostTriggerCnt;
00063 int fTakenTriggerCnt;
00064 TH1* hLostRate;
00065
00066 TH1* hEventMultipl[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00067 TH1* hPulserMultipl[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00068 int fNumHitsSelected[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00069
00070
00071 TH1* hTriggerCount[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00072 TH1* hChannelCount[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00073
00074 TH1* hLeadingCoarseAll[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00075 TH1* hLeadingFineAll[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00076 TH1* hLeadingDeltaCalAll[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00077 TH1* hLeadingDeltaCalAllFine[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00078 TH1* hTrailingCoarseAll[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00079 TH1* hTrailingFineAll[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00080 TH1* hTrailingDeltaCalAll[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00081
00082 TH1* hLeadingCoarse[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC][TRB_TDC3_CHANNELS];
00083 TH1* hLeadingFine[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC][TRB_TDC3_CHANNELS];
00084 TH1* hLeadingFineBuffer[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC][TRB_TDC3_CHANNELS];
00085 TH1* hLeadingDeltaCal[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC][TRB_TDC3_CHANNELS];
00086 TH1* hLeadingDeltaRef[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC][TRB_TDC3_CHANNELS];
00087 #ifdef CREATEMAPS
00088 TH2* hLeadingCorrelFine[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC][TRB_TDC3_CHANNELS];
00089 #endif // CREATEMAPS
00090
00091 TH1* hTrailingCoarse[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC][TRB_TDC3_CHANNELS];
00092 TH1* hTrailingFine[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC][TRB_TDC3_CHANNELS];
00093 TH1* hTrailingFineBuffer[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC][TRB_TDC3_CHANNELS];
00094 TH1* hTrailingDeltaCal[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC][TRB_TDC3_CHANNELS];
00095 TH1* hTrailingDeltaRef[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC][TRB_TDC3_CHANNELS];
00096 #ifdef CREATEMAPS
00097 TH2* hTrailingCorrelFine[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC][TRB_TDC3_CHANNELS];
00098 #endif // CREATEMAPS
00099
00100 TH2* hLeadingCoarseAllChans[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00101 TH2* hLeadingFineAllChans[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00102 TH2* hTrailingCoarseAllChans[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00103 TH2* hTrailingFineAllChans[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00104
00106 TH1* hCalcBinWidth[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC][TRB_TDC3_CHANNELS];
00107 TH1* hCalBinTime[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC][TRB_TDC3_CHANNELS];
00108
00109 TH1* hTrbTriggerCount;
00110
00111 TH1* hEpoch[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00112
00113
00115 TGo4WinCond* cLeadingFineTimeGate[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00116 TGo4WinCond* cLeadingCoarseTimeGate[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00117 TGo4WinCond* cTrailingFineTimeGate[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00118 TGo4WinCond* cTrailingCoarseTimeGate[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00119
00121 TGo4WinCond* cLeadingDeltaTimeGate[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00122 TGo4WinCond* cTrailingDeltaTimeGate[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC];
00123
00126 Bool_t fbHasCalibration[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC][TRB_TDC3_CHANNELS];
00127
00128 Bool_t fNoCalibration;
00129
00130 TTrbParam* fPar;
00131 TTrbEvent* fOutEvent;
00132
00134 UInt_t fSubeventStatus;
00135
00137 Double_t fLastTrigTime[TRB_TDC3_NUMBOARDS][TRB_TDC3_NUMTDC][2];
00138
00140 std::vector<TTrbRawHit> fRawHits[TRB_TDC3_NUMBOARDS];
00141
00142 void DoCalibration(UShort_t board, UShort_t tdc, UShort_t ch, Bool_t generalcal, Bool_t contcal);
00143
00145 void GenHistos1 (TString dirname, Int_t b, Int_t t);
00146 void GenHistos2 (TString dirname, Int_t b, Int_t t, Int_t i);
00147 void GenHistos3 (TString dirname, Int_t b, Int_t t, Int_t i);
00148
00149 static const TString leadingcoarseallname;
00150 static const TString leadingfineallname;
00151 static const TString leadingdeltacalallname;
00152 static const TString trailingcoarseallname;
00153 static const TString trailingfineallname;
00154 static const TString trailingdeltacalallname;
00155
00156 ClassDef(TTrbProc,1)
00157 };
00158
00159 #endif // _TTrbUNPACKPROCESSOR_H_