]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/AliITSRawStreamSPD.h
modifications to satisfy the coding conventions
[u/mrichter/AliRoot.git] / ITS / AliITSRawStreamSPD.h
CommitLineData
2906f4c2 1#ifndef ALIITSRAWSTREAMSPD_H
2#define ALIITSRAWSTREAMSPD_H
3/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
5
6/* $Id$ */
7
8///////////////////////////////////////////////////////////////////////////////
9///
10/// This class provides access to ITS SPD digits in raw data.
11///
12///////////////////////////////////////////////////////////////////////////////
13
14#include "AliITSRawStream.h"
d9c68335 15#include "AliITSRawStreamSPDErrorLog.h"
2906f4c2 16
17class AliITSRawStreamSPD: public AliITSRawStream {
18 public :
19 AliITSRawStreamSPD(AliRawReader* rawReader);
d9c68335 20 AliITSRawStreamSPD(const AliITSRawStreamSPD& rstream);
21 AliITSRawStreamSPD& operator=(const AliITSRawStreamSPD& rstream);
2906f4c2 22 virtual ~AliITSRawStreamSPD() {};
23
b696414b 24 virtual Bool_t Next();
3f917533 25 virtual Int_t ReadCalibHeader();
2906f4c2 26
c42b9ed0 27 // the 2 methods below are equivalent to AliITSRawStream::GetCoord1 and GetCoord2
28 // together with the AliITSRawStream::GetModuleID these are the "offline" coordinates
29 Int_t GetColumn() const {return fCoord1;};
30 Int_t GetRow() const {return fCoord2;};
31
32 // together with the AliRawReader::GetDDLID() these are the "online" coordinates
33 UShort_t GetHalfStaveNr() const {return fHalfStaveNr;}
34 UShort_t GetChipAddr() const {return fChipAddr;}
35 Int_t GetChipCol() const {return fCol;};
36 Int_t GetChipRow() const {return fRow;};
37
53ae21ce 38 // module mapping
6727e2db 39 static Int_t GetModuleNumber(UInt_t iDDL, UInt_t iModule);
40 static Int_t GetModuleNumber(UInt_t iDDL, UInt_t iHS, UInt_t iChip)
41 {return GetOfflineModuleFromOnline(iDDL,iHS,iChip);}
42
43 // coordinate conversions:
44 static Bool_t OfflineToOnline(UInt_t module, UInt_t colM, UInt_t RowM, UInt_t& eq, UInt_t& hs, UInt_t& chip, UInt_t& col, UInt_t& row);
45 static Bool_t OnlineToOffline(UInt_t eq, UInt_t hs, UInt_t chip, UInt_t col, UInt_t row, UInt_t& module, UInt_t& colM, UInt_t& rowM);
46 // coordinate conversions - offline->online
47 static UInt_t GetOnlineEqIdFromOffline(UInt_t module);
48 static UInt_t GetOnlineHSFromOffline(UInt_t module);
49 static UInt_t GetOnlineChipFromOffline(UInt_t module, UInt_t colM);
50 static UInt_t GetOnlineColFromOffline(UInt_t module, UInt_t colM);
51 static UInt_t GetOnlineRowFromOffline(UInt_t module, UInt_t rowM);
52 // coordinate conversions - online->offline
53 static UInt_t GetOfflineModuleFromOnline(UInt_t eqId, UInt_t hs, UInt_t chip);
b457135f 54 static UInt_t GetOfflineChipKeyFromOnline(UInt_t eqId, UInt_t hs, UInt_t chip);
6727e2db 55 static UInt_t GetOfflineColFromOnline(UInt_t eqId, UInt_t hs, UInt_t chip, UInt_t col);
56 static UInt_t GetOfflineRowFromOnline(UInt_t eqId, UInt_t hs, UInt_t chip, UInt_t row);
57
4f98b62b 58 Bool_t GetFastOrSignal(UInt_t eq, UInt_t hs, UInt_t chip);
59
478d804c 60 Int_t GetEventCounter() const {return fEventCounter;} // get last read event counter value
61 Short_t GetEventCounterFullEq(UInt_t eq) const;
62 Short_t GetEventCounterFullHS(UInt_t eq, UInt_t hs) const;
63 Short_t GetEventCounterFullChip(UInt_t eq, UInt_t hs, UInt_t chip) const;
64 Bool_t IsEventCounterFullConsistent() const;
b696414b 65
478d804c 66 Bool_t IsActiveEq(UInt_t eq) const;
67 Bool_t IsActiveHS(UInt_t eq, UInt_t hs) const;
68 Bool_t IsActiveChip(UInt_t eq, UInt_t hs, UInt_t chip) const;
53ae21ce 69
c42b9ed0 70 Bool_t GetHalfStavePresent(UInt_t hs);
71
72 // use the methods below to extract the information from the calibration header
73 UInt_t GetHrouterNr() const {return (fCalHeadWord[0] & 0x0000003f);}
74 Bool_t GetHhalfStaveScanned(UInt_t hs) const;
75 UInt_t GetHtype() const {return (Int_t)((fCalHeadWord[1]) & 0x000000ff);}
76 Bool_t GetHdataFormat() const {return (Bool_t)(((fCalHeadWord[1]) & 0x00000100)>>8);}
77 UInt_t GetHtriggers() const {return fCalHeadWord[2];}
78 Bool_t GetHchipPresent(UInt_t hs, UInt_t chip) const;
79 UInt_t GetHdacStart() const {return ((fCalHeadWord[5]>>24) & 0x000000ff);}
80 UInt_t GetHdacEnd() const {return ((fCalHeadWord[5]>>16) & 0x000000ff);}
81 UInt_t GetHdacStep() const {return ((fCalHeadWord[5]>>8) & 0x000000ff);}
82 UInt_t GetHdacId() const {return ((fCalHeadWord[5]) & 0x000000ff);}
83 UInt_t GetHrowStart() const {return (UInt_t) ((fCalHeadWord[6]>>24) & 0x000000ff);}
84 UInt_t GetHrowEnd() const {return (UInt_t) ((fCalHeadWord[6]>>16) & 0x000000ff);}
85 UInt_t GetHrowValue() const {return (UInt_t) ((fCalHeadWord[6]>> 8) & 0x000000ff);}
86 UInt_t GetHdacValue() const {return (Int_t) ((fCalHeadWord[6]) & 0x000000ff);}
87 UInt_t GetHdacHigh(UInt_t hs) const;
88 UInt_t GetHdacLow(UInt_t hs) const;
89 UInt_t GetHTPAmp(UInt_t hs) const;
1fd93b67 90 Bool_t GetHminTHchipPresent(UInt_t chip) const;
d9c68335 91 void ActivateAdvancedErrorLog(Bool_t activate, AliITSRawStreamSPDErrorLog* advLogger = NULL);
b457135f 92 AliITSRawStreamSPDErrorLog* GetAdvancedErrorLog() {return fAdvLogger;}
93
d9c68335 94 static const Char_t* GetErrorName(UInt_t errorCode);
95
2906f4c2 96
2906f4c2 97 enum {kDDLsNumber = 20}; // number of DDLs in SPD
98 enum {kModulesPerDDL = 12}; // number of modules in each DDL
c42b9ed0 99 enum {kCalHeadLenMax = 16}; // maximum number of calib header words
d9edae7b 100 enum ESPDRawStreamError {
d9c68335 101 kTotal,
102 kHeaderMissingErr,
103 kTrailerMissingErr,
104 kTrailerWithoutHeaderErr,
105 kHeaderCountErr,
106 kTrailerCountErr,
107 kFillUnexpectErr,
108 kFillMissingErr,
109 kWrongFillWordErr,
110 kNumberHitsErr,
111 kEventCounterErr,
112 kDDLNumberErr,
113 kHSNumberErr,
114 kChipAddrErr,
b696414b 115 kCalHeaderLengthErr,
116 kAdvEventCounterErr, // used by SPDmood
4f98b62b 117 kAdvEventCounterOrderErr,// used by SPDmood
118 kTrailerErrorBitErr
d9edae7b 119 };
2906f4c2 120
121 private :
122 static const Int_t fgkDDLModuleMap[kDDLsNumber][kModulesPerDDL]; // mapping DDL/module -> module number
123
d9c68335 124 Bool_t ReadNextShort();
125 Bool_t ReadNextInt();
126 void NewEvent();
127 void CheckHeaderAndTrailerCount(Int_t ddlID);
128
129 Int_t fEventCounter; // chip event counter
478d804c 130 Short_t fEventCounterFull[20][6][10]; // chip event counter
131
d9c68335 132 UShort_t fChipAddr; // chip nr
133 UShort_t fHalfStaveNr; // half stave nr
134 UInt_t fCol; // chip column nr
135 UInt_t fRow; // chip row nr
136 UInt_t fCalHeadWord[kCalHeadLenMax]; // calibration header words
137
138 UShort_t fData; // 16 bit data word read
139 UInt_t fOffset; // offset for cell column
140 UInt_t fHitCount; // counter of hits
141 UChar_t fDataChar1, fDataChar2, fDataChar3, fDataChar4; // temps part of a 32bit word
142 Bool_t fFirstWord; // keeps track of which of the two 16bit words out of the 32bit word to read when ReadNextShort is called
143 Bool_t fCalHeadRead[20]; // calibration header read flags (reset at new event)
144 UInt_t fPrevEventId; // previous event id (needed to know if there is a new event)
145
146 UInt_t fEqPLBytesRead; // bytes read for current equipment payload
147 UInt_t fEqPLChipHeadersRead; // number of chip headers found in current equipment payload
148 UInt_t fEqPLChipTrailersRead; // number of chip trailers found in current equipment payload
149 Bool_t fHeaderOrTrailerReadLast; // in previous words, was a header (true) or a trailer (false) read last
150 UInt_t fExpectedHeaderTrailerCount; // expected number of headers and trailers for the current equipment payload
151 Bool_t fFillOutOfSynch; // has a fill word been put in the wrong place?
152 Int_t fDDLID; // ddl id
153 Int_t fLastDDLID; // ddl id for equipment read in previous words
154
155 Bool_t fAdvancedErrorLog; // is the advanced error logging activated?
156 AliITSRawStreamSPDErrorLog *fAdvLogger; // pointer to special error logger object
72600597 157
4f98b62b 158 Bool_t fFastOrSignal[20][6][10]; // fastor signal bit (one per chip)
159
b696414b 160 Bool_t fActiveEq[20]; // which equipments are active (found in data)
161 Bool_t fActiveHS[20][6]; // which half-staves are active (blockattribute bits)
478d804c 162 Bool_t fActiveChip[20][6][10]; // which chips are active (found in data)
b696414b 163
2906f4c2 164 ClassDef(AliITSRawStreamSPD, 0) // class for reading ITS SPD raw digits
165};
166
167#endif