1 #ifndef ALIITSRAWSTREAMSDD_H
2 #define ALIITSRAWSTREAMSDD_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
8 ///////////////////////////////////////////////////////////////////////////////
10 /// This class provides access to ITS SDD digits in raw data
11 /// (default=simulated data).
12 ///////////////////////////////////////////////////////////////////////////////
14 #include "AliITSRawStream.h"
15 #include "AliITSDDLModuleMapSDD.h"
20 class AliITSRawStreamSDD: public AliITSRawStream {
22 AliITSRawStreamSDD(AliRawReader* rawReader);
23 AliITSRawStreamSDD(const AliITSRawStreamSDD& rs);
24 AliITSRawStreamSDD& operator=(const AliITSRawStreamSDD& rs);
25 virtual ~AliITSRawStreamSDD();
27 virtual Bool_t Next();
29 virtual Int_t GetAnode() const {return fCoord1;}
30 virtual Int_t GetTime() const {return fCoord2;}
31 virtual Int_t GetChannel() const {return fChannel;}
32 virtual Int_t GetEightBitSignal() const {return fEightBitSignal;}
33 virtual Int_t GetCarlosId() const {return fCarlosId;}
34 virtual Int_t GetEventId() const {return fEventId;}
35 virtual Int_t GetJitter() {return fJitter;} // not const in a daughter class
37 virtual Int_t ReadJitter() const {return 0;}
39 virtual void SetDecompressAmbra(Bool_t deco=kTRUE){
40 fDecompressAmbra=deco;
42 virtual void SetDDLModuleMap(AliITSDDLModuleMapSDD* ddlsdd){
43 if(!fDDLModuleMap) fDDLModuleMap=new AliITSDDLModuleMapSDD();
44 fDDLModuleMap->SetDDLMap(ddlsdd);}
45 virtual void SetLowCarlosThreshold(Int_t th, Int_t i)
46 {fLowThreshold[i]=th;}
47 virtual void SetZeroSuppLowThreshold(Int_t iMod, Int_t iSid, Int_t th)
48 {fLowThresholdArray[iMod][iSid]=th;}
49 Int_t GetModuleNumber(UInt_t iDDL, UInt_t iModule) const {
50 if(!fDDLModuleMap) return kSPDModules+1; // dummy module number if the DDL map is not set (case of DAs)
51 return fDDLModuleMap->GetModuleNumber(iDDL,iModule);
55 enum {kSDDModules = 260}; // number of SDD modules
56 enum {kSPDModules = 240}; // number of SPD modules (used as offset)
57 enum {kDDLsNumber = 24}; // number of DDLs in SDD
58 enum {kModulesPerDDL = 12}; // number of modules in each DDL
59 enum {kCarlosWords = 12}; // number of FIFOCARLOS Words
60 enum {kFifoWords = 4}; // number of FIFO Words
61 enum ESDDRawStreamError {
66 virtual Bool_t SkipHeaderWord();
67 virtual UInt_t ReadBits();
68 virtual Int_t DecompAmbra(Int_t value) const;
70 static const UInt_t fgkCodeLength[8]; //code length
72 AliITSDDLModuleMapSDD* fDDLModuleMap; // mapping DDL/module -> module number
73 UInt_t fData; // data read for file
74 Bool_t fResetSkip; // flag for end of DDL data
75 Int_t fSkip[kDDLsNumber];// obsolete -- needed to compile AliITSRawStreamSDDv2
76 Int_t fEventId; // event ID from header
77 Int_t fCarlosId; // carlos ID
78 Int_t fChannel; // current channel
79 Int_t fJitter; // jitter between L0 and pascal stop (x25ns)
80 ULong64_t fChannelData[kModulesPerDDL][2];// packed data for the 2 channels
81 UInt_t fLastBit[kModulesPerDDL][2]; // last filled bit in fChannelData
82 UInt_t fChannelCode[kModulesPerDDL][2];// current channel code
83 Bool_t fReadCode[kModulesPerDDL][2]; // next bits are code or data
84 UInt_t fReadBits[kModulesPerDDL][2]; // number of bits to read
85 Int_t fLowThresholdArray[kSDDModules][2]; // array with low thresholds for all modules
86 Int_t fLowThreshold[2]; // obsolete -- needed to compile AliITSRawStreamSDDv2
87 Int_t fNfifo[kFifoWords]; // FIFO number
88 Int_t fTimeBin[kModulesPerDDL][2]; // current timebin [ncarlos][nchannels]
89 Int_t fAnode[kModulesPerDDL][2]; // current anode [ncarlos][nchannels]
90 UInt_t fICarlosWord[kCarlosWords]; // Carlos words
91 UInt_t fIFifoWord[kFifoWords]; // FIFO words
92 Int_t fICountFoot[kModulesPerDDL]; // counter for carlos footer words
93 Int_t fEightBitSignal; // signal at 8 bit
94 Bool_t fDecompressAmbra; //flag to switch off decompression
96 ClassDef(AliITSRawStreamSDD, 14) // class for reading ITS SDD raw digits