New histos for raws and setters for calib object
[u/mrichter/AliRoot.git] / AD / AliADRawStream.h
CommitLineData
8484394b 1#ifndef ALIADRAWSTREAM_H
2#define ALIADRAWSTREAM_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/// This is a class for reading the AD DDL raw data
9/// The format of the raw data corresponds to the one
10/// implemented in AliADBuffer class.
11///
12/// PLEASE NOTE that Int_t channel is here the FEE channel from 0 to 16 in the
13/// not yet defined order which may be not the same order as the order
14/// defined in aliroot by the naming and numbering conventions.
15/// Therefore one has to go from FEE_Channel to AliRoot_Channel using
16/// GetOfflineChannel(Int_t channel) when going from Online to Offline !!!
17///
18///////////////////////////////////////////////////////////////////////////////
19
20#include <TObject.h>
21#include <TMath.h>
22
23class AliRawReader;
24
25class AliADRawStream: public TObject {
26 public :
27 AliADRawStream(AliRawReader* rawReader);
28 virtual ~AliADRawStream();
29
30 virtual void Reset();
31 virtual Bool_t Next();
32
33// Getters of various scalers and Minimum Bias flags :
34
35 ULong64_t GetBBScalers(Int_t channel) const
36 { return fBBScalers[channel]; }
37 ULong64_t GetBGScalers(Int_t channel) const
38 { return fBGScalers[channel]; }
39 UInt_t GetTriggerScalers(Int_t num_scaler) const
40 { return fScalers[num_scaler]; }
41 UInt_t GetBunchNumbersMB(Int_t num_bunch) const
42 { return fBunchNumbers[num_bunch]; }
43 UShort_t GetChargeMB(Int_t channel, Int_t num_bunch) const
44 { return fChargeMB[channel][num_bunch]; }
45 Bool_t GetIntMBFlag(Int_t channel, Int_t num_bunch) const
46 { return fIsIntMB[channel][num_bunch]; }
47 Bool_t GetBBMBFlag(Int_t channel, Int_t num_bunch) const
48 { return fIsBBMB[channel][num_bunch]; }
49 Bool_t GetBGMBFlag(Int_t channel, Int_t num_bunch) const
50 { return fIsBGMB[channel][num_bunch]; }
51
52// Getters of ADC signals, ADC pedestals, time information and corresponding flags :
53
54 Short_t GetADC(Int_t channel) const
55 { return TMath::MaxElement(kNEvOfInt, fADC[channel]); } // maximum value instead of central clock
56// { return fADC[channel][kNEvOfInt/2]; }
57
58 Short_t GetPedestal(Int_t channel, Int_t event) const
59 { return fADC[channel][event]; }
60 Bool_t GetIntegratorFlag(Int_t channel, Int_t event) const
61 { return fIsInt[channel][event]; }
62 Bool_t GetBBFlag(Int_t channel, Int_t event) const
63 { return fIsBB[channel][event]; }
64 Bool_t GetBGFlag(Int_t channel, Int_t event) const
65 { return fIsBG[channel][event]; }
66 Short_t GetTime(Int_t channel) const
67 { return fTime[channel]; }
68 Short_t GetWidth(Int_t channel) const
69 { return fWidth[channel]; }
70
71 UShort_t GetTriggerInputs() const
72 { return fTrigger; }
73 UShort_t GetTriggerInputsMask() const
74 { return fTriggerMask; }
75
76// Getter of Offline Channel number as used in aliroot (defined by aliroot
77// numbering convention) from FEE channel (electronic channel number given
78// by the V0 electronics readout) - See comment above -
79
80 Int_t GetOfflineChannel(Int_t channel) const
81 { Int_t fOfflineChannel[16] = {0,1,2,3,4,5,6,7,
82 8,9,10,11,12,13,14,15};
83 return fOfflineChannel[channel]; }
84
85 enum EADRawDataParams {
86 kNChannels = 16, // number of electronic channels in AD (FEE numbering)
87 kNEvOfInt = 21, // number of events of interest
88 kNScalers = 16, // number of scalers
89 kNBunches = 10 // number of bunches used in Minimum Bias information
90 };
91
92 enum EADRawStreamError {
93 kRawDataSizeErr = 1
94 };
95
96 private:
97
98 AliADRawStream(const AliADRawStream& stream);
99 AliADRawStream& operator = (const AliADRawStream& stream);
100
101 UInt_t GetNextWord();
102 UShort_t GetNextShort();
103
104 ULong64_t fBBScalers[kNChannels]; // 'Beam-Beam' scalers for all channels
105 ULong64_t fBGScalers[kNChannels]; // 'Beam-Gas' scalers for all channels
106 UInt_t fScalers[kNScalers]; // Trigger scalers
107 UInt_t fBunchNumbers[kNBunches]; // Bunch numbers for the previous 10 MB events
108 UShort_t fChargeMB[kNChannels][kNBunches]; // ADC counts for all channels for the previous 10 MB events
109 Bool_t fIsIntMB[kNChannels][kNBunches]; // 'Integrator' flag for all channels for the previous 10 MB events
110 Bool_t fIsBBMB[kNChannels][kNBunches]; // 'Beam-Beam' flag for all channels for the previous 10 MB events
111 Bool_t fIsBGMB[kNChannels][kNBunches]; // 'Beam-Gas' for all channels for the previous 10 MB events
112
113 Short_t fADC[kNChannels][kNEvOfInt]; // ADC counts for all channels and all events of interest
114 Bool_t fIsInt[kNChannels][kNEvOfInt]; // 'Integrator' flag for all channels
115 Bool_t fIsBB[kNChannels][kNEvOfInt]; // 'Beam-Beam' flag for all channels
116 Bool_t fIsBG[kNChannels][kNEvOfInt]; // 'Beam-Gas' flag for all channels
117 Short_t fTime[kNChannels]; // leading time for all channels - from HPTDC - in HPTDC units
118 Short_t fWidth[kNChannels]; // pulse width for all channels - from HPTDC - in HPTDC units
119
120 UShort_t fTrigger; // AD trigger inputs
121 UShort_t fTriggerMask; // AD trigger inputs mask
122
123 Int_t fPosition; // current position in the raw-data payload
124
125
126 AliRawReader* fRawReader; // object for reading the raw data
127
128 UChar_t* fData; // pointer to raw data payload
129
130 ClassDef(AliADRawStream, 0) // class for reading AD DDL raw data
131};
132
133#endif