Line data Source code
1 : #ifndef ALIVZERORAWSTREAM_H
2 : #define ALIVZERORAWSTREAM_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 VZERO DDL raw data
9 : /// The format of the raw data corresponds to the one
10 : /// implemented in AliVZEROBuffer class.
11 : ///
12 : /// PLEASE NOTE that Int_t channel is here the FEE channel from 0 to 63 in the
13 : /// order defined by Yannick Zoccarato which is 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 :
23 : class AliRawReader;
24 : class AliVZEROTriggerData;
25 :
26 : class AliVZERORawStream: public TObject {
27 : public :
28 : AliVZERORawStream(AliRawReader* rawReader);
29 : virtual ~AliVZERORawStream();
30 :
31 : virtual void Reset();
32 : virtual Bool_t Next();
33 :
34 : // Getters of various scalers and Minimum Bias flags :
35 :
36 : ULong64_t GetBBScalers(Int_t channel) const
37 512 : { return fBBScalers[channel]; }
38 : ULong64_t GetBGScalers(Int_t channel) const
39 512 : { return fBGScalers[channel]; }
40 : UInt_t GetTriggerScalers(Int_t num_scaler) const
41 128 : { return fScalers[num_scaler]; }
42 : UInt_t GetBunchNumbersMB(Int_t num_bunch) const
43 80 : { return fBunchNumbers[num_bunch]; }
44 : UShort_t GetChargeMB(Int_t channel, Int_t num_bunch) const
45 5120 : { return fChargeMB[channel][num_bunch]; }
46 : Bool_t GetIntMBFlag(Int_t channel, Int_t num_bunch) const
47 5120 : { return fIsIntMB[channel][num_bunch]; }
48 : Bool_t GetBBMBFlag(Int_t channel, Int_t num_bunch) const
49 5120 : { return fIsBBMB[channel][num_bunch]; }
50 : Bool_t GetBGMBFlag(Int_t channel, Int_t num_bunch) const
51 5120 : { return fIsBGMB[channel][num_bunch]; }
52 :
53 : // Getters of ADC signals, ADC pedestals, time information and corresponding flags :
54 :
55 : Short_t GetADC(Int_t channel) const
56 0 : { return TMath::MaxElement(kNEvOfInt, fADC[channel]); } // maximum value instead of central clock
57 : // { return fADC[channel][kNEvOfInt/2]; }
58 :
59 : Short_t GetPedestal(Int_t channel, Int_t event) const
60 11776 : { return fADC[channel][event]; }
61 : Bool_t GetIntegratorFlag(Int_t channel, Int_t event) const
62 1536 : { return fIsInt[channel][event]; }
63 : Bool_t GetBBFlag(Int_t channel, Int_t event) const
64 11776 : { return fIsBB[channel][event]; }
65 : Bool_t GetBGFlag(Int_t channel, Int_t event) const
66 11776 : { return fIsBG[channel][event]; }
67 : Short_t GetTime(Int_t channel) const
68 512 : { return fTime[channel]; }
69 : Short_t GetWidth(Int_t channel) const
70 512 : { return fWidth[channel]; }
71 :
72 : UShort_t GetTriggerInputs() const
73 16 : { return fTrigger; }
74 : UShort_t GetTriggerInputsMask() const
75 8 : { return fTriggerMask; }
76 :
77 : void CalculateChargeForCentrTriggers(AliVZEROTriggerData *triggerData,
78 : UShort_t &chargeA, UShort_t &chargeC) const;
79 : void CalculateBBandBGFlags(AliVZEROTriggerData *triggerData,
80 : UChar_t &nBBA, UChar_t &nBBC,
81 : UChar_t &nBGA, UChar_t &nBGC) const;
82 : void FillTriggerBits(AliVZEROTriggerData *triggerData);
83 :
84 : // Getter of Offline Channel number as used in aliroot (defined by aliroot
85 : // numbering convention) from FEE channel (electronic channel number given
86 : // by the V0 electronics readout) - See comment above -
87 :
88 : Int_t GetOfflineChannel(Int_t channel) const
89 2048 : { Int_t fOfflineChannel[64] = {39, 38, 37, 36, 35, 34, 33, 32,
90 : 47, 46, 45, 44, 43, 42, 41, 40,
91 : 55, 54, 53, 52, 51, 50, 49, 48,
92 : 63, 62, 61, 60, 59, 58, 57, 56,
93 : 7, 6, 5, 4, 3, 2, 1, 0,
94 : 15, 14, 13, 12, 11, 10, 9, 8,
95 : 23, 22, 21, 20, 19, 18, 17, 16,
96 : 31, 30, 29, 28, 27, 26, 25, 24};
97 1024 : return fOfflineChannel[channel]; }
98 :
99 : enum EVZERORawDataParams {
100 : kNChannels = 64, // number of electronic channels in V0 (FEE numbering)
101 : kNEvOfInt = 21, // number of events of interest
102 : kNScalers = 16, // number of scalers
103 : kNBunches = 10 // number of bunches used in Minimum Bias information
104 : };
105 :
106 : enum EVZERORawStreamError {
107 : kRawDataSizeErr = 1
108 : };
109 :
110 : private:
111 :
112 : AliVZERORawStream(const AliVZERORawStream& stream);
113 : AliVZERORawStream& operator = (const AliVZERORawStream& stream);
114 :
115 : UInt_t GetNextWord();
116 : UShort_t GetNextShort();
117 :
118 : ULong64_t fBBScalers[kNChannels]; // 'Beam-Beam' scalers for all channels
119 : ULong64_t fBGScalers[kNChannels]; // 'Beam-Gas' scalers for all channels
120 : UInt_t fScalers[kNScalers]; // Trigger scalers
121 : UInt_t fBunchNumbers[kNBunches]; // Bunch numbers for the previous 10 MB events
122 : UShort_t fChargeMB[kNChannels][kNBunches]; // ADC counts for all channels for the previous 10 MB events
123 : Bool_t fIsIntMB[kNChannels][kNBunches]; // 'Integrator' flag for all channels for the previous 10 MB events
124 : Bool_t fIsBBMB[kNChannels][kNBunches]; // 'Beam-Beam' flag for all channels for the previous 10 MB events
125 : Bool_t fIsBGMB[kNChannels][kNBunches]; // 'Beam-Gas' for all channels for the previous 10 MB events
126 :
127 : Short_t fADC[kNChannels][kNEvOfInt]; // ADC counts for all channels and all events of interest
128 : Bool_t fIsInt[kNChannels][kNEvOfInt]; // 'Integrator' flag for all channels
129 : Bool_t fIsBB[kNChannels][kNEvOfInt]; // 'Beam-Beam' flag for all channels
130 : Bool_t fIsBG[kNChannels][kNEvOfInt]; // 'Beam-Gas' flag for all channels
131 : Short_t fTime[kNChannels]; // leading time for all channels - from HPTDC - in HPTDC units
132 : Short_t fWidth[kNChannels]; // pulse width for all channels - from HPTDC - in HPTDC units
133 :
134 : UShort_t fTrigger; // VZERO trigger inputs
135 : UShort_t fTriggerMask; // VZERO trigger inputs mask
136 :
137 : Int_t fPosition; // current position in the raw-data payload
138 :
139 :
140 : AliRawReader* fRawReader; // object for reading the raw data
141 :
142 : UChar_t* fData; // pointer to raw data payload
143 :
144 52 : ClassDef(AliVZERORawStream, 0) // class for reading VZERO DDL raw data
145 : };
146 :
147 : #endif
|