]>
Commit | Line | Data |
---|---|---|
ddeb9c4f | 1 | #ifndef ALITPCCALIBALTROHEADERS_H |
2 | #define ALITPCCALIBALTROHEADERS_H | |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
6 | //////////////////////////////////////////////////////////////////////////////////////// | |
7 | // // | |
8 | // TPC ALTRO Header analysis // | |
9 | // // | |
10 | //////////////////////////////////////////////////////////////////////////////////////// | |
11 | ||
12 | #include <TVectorF.h> | |
13 | #include <TObjArray.h> | |
14 | #include <THnSparse.h> | |
15 | ||
16 | #include "AliTPCCalibRawBase.h" | |
17 | #include "AliTPCCalPad.h" | |
18 | #include "AliTPCROC.h" | |
19 | ||
20 | class TH2C; | |
be3dbaa0 | 21 | class TH1F; |
f113dfeb | 22 | class TMap; |
1d32f273 | 23 | class TGraph; |
24 | class TCanvas; | |
ddeb9c4f | 25 | |
26 | class AliTPCCalibRaw : public AliTPCCalibRawBase { | |
27 | public: | |
28 | AliTPCCalibRaw(); | |
f113dfeb | 29 | AliTPCCalibRaw(const TMap *config); |
ddeb9c4f | 30 | |
31 | virtual ~AliTPCCalibRaw(); | |
32 | ||
be3dbaa0 | 33 | enum {kNRCU=216}; |
ddeb9c4f | 34 | |
35 | virtual Int_t Update(const Int_t isector, const Int_t iRow, const Int_t iPad, | |
36 | const Int_t iTimeBin, const Float_t signal); | |
5312f439 | 37 | virtual void UpdateDDL(); |
ddeb9c4f | 38 | virtual void EndEvent(); |
39 | virtual void ResetEvent(); | |
40 | virtual void Analyse(); | |
41 | ||
42 | UInt_t GetNFailL1Phase() const {return fNFailL1Phase;} | |
be3dbaa0 | 43 | UInt_t GetNFailL1PhaseEvents() const {return fNFailL1PhaseEvent;} |
ddeb9c4f | 44 | Int_t GetPeakDetectionMinus() const {return fPeakDetMinus;} |
45 | Int_t GetPeakDetectionPlus() const {return fPeakDetPlus;} | |
46 | ||
47 | const TVectorF* GetALTROL1PhaseEvents() const {return &fArrALTROL1Phase;} | |
48 | ||
49 | const TVectorF *GetALTROL1PhaseEventsRCU(Int_t rcu) const {return (TVectorF*)fArrALTROL1PhaseEvent.At(rcu);} | |
50 | const TVectorF *GetALTROL1PhaseFailEventsRCU(Int_t rcu) const {return (TVectorF*)fArrALTROL1PhaseFailEvent.At(rcu);} | |
51 | ||
1d32f273 | 52 | const TVectorF *GetOccupancyEvent() const {return &fVOccupancyEvent;} |
53 | const TVectorF *GetOccupancyEventSensitive() const {return &fVOccupancySenEvent;} | |
54 | const TVectorF *GetSignalSumEvent() const {return &fVSignalSumEvent;} | |
55 | const TVectorF *GetSignalSumEventSensitive() const {return &fVSignalSumSenEvent;} | |
56 | const TVectorF *GetFiredPadsSensitive() const {return &fVNfiredPadsSenEvent;} | |
57 | const TVectorF *GetEventTimeStamps() const {return &fVTimeStampEvent;} | |
58 | UInt_t GetFirstTimeStamp() const {return fFirstTimeStamp;} | |
ddeb9c4f | 59 | |
1d32f273 | 60 | void SetRangePeakDetection(Int_t minus, Int_t plus) { fPeakDetMinus=minus; fPeakDetPlus=plus;} |
61 | //Phase info | |
ddeb9c4f | 62 | TH2C *MakeHistL1RCUEvents(Int_t type=0); |
63 | TH2C *MakeHistL1RCUEventsIROC(Int_t type=0); | |
64 | TH2C *MakeHistL1RCUEventsOROC(Int_t type=0); | |
be3dbaa0 | 65 | TH1F *MakeHistL1PhaseDist(); |
66 | TVectorF *MakeVectL1PhaseDist(); | |
1d32f273 | 67 | //Occupancy info |
68 | TGraph* MakeGraphOccupancy(const Int_t type=0, const Int_t xType=0); | |
69 | TGraph* MakeGraphNoiseEvents(); | |
70 | TCanvas* MakeCanvasOccupancy(const Int_t xType=1, Bool_t sen=kFALSE); | |
ddeb9c4f | 71 | |
72 | const THnSparseI *GetHnDrift() const {return fHnDrift;} | |
73 | // AliTPCCalPad *CreateCalPadL1Mean(); | |
74 | // AliTPCCalPad *CreateCalPadL1RMS(); | |
75 | ||
76 | private: | |
77 | Int_t fPeakDetMinus; // Consecutive timebins on rising edge to be regarded as a signal | |
78 | Int_t fPeakDetPlus; // Consecutive timebins on falling edge to be regarded as a signal | |
79 | UInt_t fNFailL1Phase; //Number of failures in L1 phase | |
be3dbaa0 | 80 | UInt_t fNFailL1PhaseEvent; //Number of events with L1 phase failures |
ddeb9c4f | 81 | UInt_t fFirstTimeStamp; //Time Stamp from first event |
82 | //binning dv hist | |
83 | UInt_t fNSecTime; //Number of seconds per bin in time | |
84 | UInt_t fNBinsTime; //Number of bin in time | |
85 | //processing information | |
86 | Bool_t fPadProcessed; //! if last pead has already been filled for the current pad | |
87 | Int_t fCurrentChannel; //! current channel processed | |
88 | Int_t fCurrentSector; //! current sector processed | |
89 | Int_t fLastSector; //! current sector processed | |
90 | Int_t fCurrentRow; //! current row processed | |
91 | Int_t fCurrentPad; //! current pad processed | |
92 | Int_t fLastTimeBinProc; //! last time bin processed | |
93 | Int_t fPeakTimeBin; //! time bin with local maximum | |
94 | Int_t fLastSignal; //! last signal processed | |
95 | Int_t fNOkPlus; //! number of processed time bins fullfilling peak criteria | |
96 | Int_t fNOkMinus; //! number of processed time bins fullfilling peak criteria | |
1d32f273 | 97 | Int_t fNanoSec; //! current nano seconds stamp |
ddeb9c4f | 98 | // |
99 | //L1 phase stuff | |
100 | TVectorF fArrCurrentPhaseDist; //!Phase distribution of the current event | |
be3dbaa0 | 101 | TVectorF fArrCurrentPhase; //!Current phase of all RCUs |
102 | TVectorF fArrFailEventNumber; //event numbers of failed events; | |
ddeb9c4f | 103 | TVectorF fArrALTROL1Phase; //Array of L1 phases on an event bases; |
104 | TObjArray fArrALTROL1PhaseEvent; //L1 phase for each RCU and event | |
105 | TObjArray fArrALTROL1PhaseFailEvent; //L1 failure for each RCU and event | |
106 | //drift velocity stuff | |
107 | enum {kHnBinsDV=3}; | |
108 | THnSparseI *fHnDrift; //Histogram last time bin vs. ROC, Time | |
1d32f273 | 109 | //occupancy |
110 | TVectorF fVOccupancyEvent; //occupancy per event (number of samples above threshold) | |
111 | TVectorF fVSignalSumEvent; //occupancy per event (sum of all adc values) | |
112 | TVectorF fVOccupancySenEvent; //occupancy per event (number of samples abouve threshold) in sensitive regions | |
113 | TVectorF fVSignalSumSenEvent; //occupancy per event (sum of all adc values) in sensitive regions | |
114 | TVectorF fVNfiredPadsSenEvent; //number of pads with a signal above threshold in sensitive regions | |
115 | TVectorF fVTimeStampEvent; //timestamp for all events | |
ddeb9c4f | 116 | |
117 | TVectorF *MakeArrL1PhaseRCU(Int_t rcu, Bool_t force=kFALSE); | |
118 | TVectorF *MakeArrL1PhaseFailRCU(Int_t rcu, Bool_t force=kFALSE); | |
119 | ||
120 | Bool_t IsEdgePad(Int_t sector, Int_t row, Int_t pad) const; | |
121 | void CreateDVhist(); | |
122 | ||
123 | AliTPCCalibRaw(AliTPCCalibRaw &calib); | |
124 | AliTPCCalibRaw& operator = (const AliTPCCalibRaw &source); | |
125 | ||
1d32f273 | 126 | ClassDef(AliTPCCalibRaw,3) // Analysis of the Altro header information |
ddeb9c4f | 127 | }; |
128 | ||
129 | //---------------------- | |
130 | // Inline Functions | |
131 | //---------------------- | |
132 | inline TVectorF *AliTPCCalibRaw::MakeArrL1PhaseRCU(Int_t rcu, Bool_t force) | |
133 | { | |
134 | TVectorF *arr=(TVectorF*)fArrALTROL1PhaseEvent.UncheckedAt(rcu); | |
135 | if (!arr && force) { | |
be3dbaa0 | 136 | arr=new TVectorF(100); |
ddeb9c4f | 137 | fArrALTROL1PhaseEvent.AddAt(arr,rcu); |
138 | } | |
139 | return arr; | |
140 | } | |
141 | // | |
142 | inline TVectorF *AliTPCCalibRaw::MakeArrL1PhaseFailRCU(Int_t rcu, Bool_t force) | |
143 | { | |
144 | TVectorF *arr=(TVectorF*)fArrALTROL1PhaseFailEvent.UncheckedAt(rcu); | |
145 | if (!arr && force) { | |
1d32f273 | 146 | arr=new TVectorF(100); |
ddeb9c4f | 147 | fArrALTROL1PhaseFailEvent.AddAt(arr,rcu); |
148 | } | |
149 | return arr; | |
150 | } | |
151 | //_____________________________________________________________________ | |
152 | inline Bool_t AliTPCCalibRaw::IsEdgePad(Int_t sector, Int_t row, Int_t pad) const | |
153 | { | |
154 | // | |
155 | // return true if pad is on the edge of a row | |
156 | // | |
157 | Int_t edge1 = 0; | |
158 | if ( pad == edge1 ) return kTRUE; | |
159 | Int_t edge2 = fROC->GetNPads(sector,row)-1; | |
160 | if ( pad == edge2 ) return kTRUE; | |
161 | ||
162 | return kFALSE; | |
163 | } | |
164 | ||
165 | ||
166 | #endif |