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 */
6 ///////////////////////////////////////////////////////////////////////////////
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.
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 !!!
18 ///////////////////////////////////////////////////////////////////////////////
24 class AliVZERORawStream: public TObject {
26 AliVZERORawStream(AliRawReader* rawReader);
27 virtual ~AliVZERORawStream();
30 virtual Bool_t Next();
32 // Getters of various scalers and Minimum Bias flags :
34 ULong64_t GetBBScalers(Int_t channel) const
35 { return fBBScalers[channel]; }
36 ULong64_t GetBGScalers(Int_t channel) const
37 { return fBGScalers[channel]; }
38 UInt_t GetTriggerScalers(Int_t num_scaler) const
39 { return fScalers[num_scaler]; }
40 UInt_t GetBunchNumbersMB(Int_t num_bunch) const
41 { return fBunchNumbers[num_bunch]; }
42 UShort_t GetChargeMB(Int_t channel, Int_t num_bunch) const
43 { return fChargeMB[channel][num_bunch]; }
44 Bool_t GetIntMBFlag(Int_t channel, Int_t num_bunch) const
45 { return fIsIntMB[channel][num_bunch]; }
46 Bool_t GetBBMBFlag(Int_t channel, Int_t num_bunch) const
47 { return fIsBBMB[channel][num_bunch]; }
48 Bool_t GetBGMBFlag(Int_t channel, Int_t num_bunch) const
49 { return fIsBGMB[channel][num_bunch]; }
51 // Getters of ADC signals, ADC pedestals, time information and corresponding flags :
53 UShort_t GetADC(Int_t channel) const
54 { return fADC[channel][kNEvOfInt/2]; }
55 UShort_t GetPedestal(Int_t channel, Int_t event) const
56 { return fADC[channel][event]; }
57 Bool_t GetIntegratorFlag(Int_t channel, Int_t event) const
58 { return fIsInt[channel][event]; }
59 Bool_t GetBBFlag(Int_t channel, Int_t event) const
60 { return fIsBB[channel][event]; }
61 Bool_t GetBGFlag(Int_t channel, Int_t event) const
62 { return fIsBG[channel][event]; }
63 UInt_t GetTime(Int_t channel) const
64 { return fTime[channel]; }
65 UInt_t GetWidth(Int_t channel) const
66 { return fWidth[channel]; }
68 // Getter of Offline Channel number as used in aliroot (defined by aliroot
69 // numbering convention) from FEE channel (electronic channel number given
70 // by the V0 electronics readout) - See comment above -
72 Int_t GetOfflineChannel(Int_t channel) const
73 { Int_t fOfflineChannel[64] = {39, 38, 37, 36, 35, 34, 33, 32,
74 47, 46, 45, 44, 43, 42, 41, 40,
75 55, 54, 53, 52, 51, 50, 49, 48,
76 63, 62, 61, 60, 59, 58, 57, 56,
77 7, 6, 5, 4, 3, 2, 1, 0,
78 15, 14, 13, 12, 11, 10, 9, 8,
79 23, 22, 21, 20, 19, 18, 17, 16,
80 31, 30, 29, 28, 27, 26, 25, 24};
81 return fOfflineChannel[channel]; }
83 enum EVZERORawDataParams {
84 kNChannels = 64, // number of electronic channels in V0 (FEE numbering)
85 kNEvOfInt = 21, // number of events of interest
86 kNScalers = 16, // number of scalers
87 kNBunches = 10 // number of bunches used in Minimum Bias information
90 enum EVZERORawStreamError {
96 AliVZERORawStream(const AliVZERORawStream& stream);
97 AliVZERORawStream& operator = (const AliVZERORawStream& stream);
100 UShort_t GetNextShort();
102 ULong64_t fBBScalers[kNChannels]; // 'Beam-Beam' scalers for all channels
103 ULong64_t fBGScalers[kNChannels]; // 'Beam-Gas' scalers for all channels
104 UInt_t fScalers[kNScalers]; // Trigger scalers
105 UInt_t fBunchNumbers[kNBunches]; // Bunch numbers for the previous 10 MB events
106 UShort_t fChargeMB[kNChannels][kNBunches]; // ADC counts for all channels for the previous 10 MB events
107 Bool_t fIsIntMB[kNChannels][kNBunches]; // 'Integrator' flag for all channels for the previous 10 MB events
108 Bool_t fIsBBMB[kNChannels][kNBunches]; // 'Beam-Beam' flag for all channels for the previous 10 MB events
109 Bool_t fIsBGMB[kNChannels][kNBunches]; // 'Beam-Gas' for all channels for the previous 10 MB events
111 UShort_t fADC[kNChannels][kNEvOfInt]; // ADC counts for all channels and all events of interest
112 Bool_t fIsInt[kNChannels][kNEvOfInt]; // 'Integrator' flag for all channels
113 Bool_t fIsBB[kNChannels][kNEvOfInt]; // 'Beam-Beam' flag for all channels
114 Bool_t fIsBG[kNChannels][kNEvOfInt]; // 'Beam-Gas' flag for all channels
115 Int_t fTime[kNChannels]; // leading time for all channels - from HPTDC
116 Int_t fWidth[kNChannels]; // pulse width for all channels - from HPTDC
118 UShort_t fTrigger; // VZERO trigger inputs
119 UShort_t fTriggerMask; // VZERO trigger inputs mask
121 Int_t fPosition; // current position in the raw-data payload
124 AliRawReader* fRawReader; // object for reading the raw data
126 UChar_t* fData; // pointer to raw data payload
128 ClassDef(AliVZERORawStream, 0) // class for reading VZERO DDL raw data