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"
19 class AliITSRawStreamSDD: public AliITSRawStream {
21 AliITSRawStreamSDD(AliRawReader* rawReader);
22 virtual ~AliITSRawStreamSDD() {};
24 virtual Bool_t Next();
26 virtual Int_t GetAnode() const {return fCoord1;}
27 virtual Int_t GetTime() const {return fCoord2;}
28 virtual Int_t GetChannel() const {return fChannel;}
29 virtual Int_t ReadJitter() const {return 0;}
30 virtual Int_t GetCarlosId() const {return fCarlosId;}
31 virtual void SetLowCarlosThreshold(Int_t th, Int_t i)
32 {fLowThreshold[i]=th;}
33 static Int_t GetModuleNumber(UInt_t iDDL, UInt_t iModule)
34 {return fgkDDLModuleMap[iDDL][iModule];}
36 virtual Bool_t ResetSkip(Int_t ddln);
38 enum {kDDLsNumber = 24}; // number of DDLs in SDD
39 enum {kModulesPerDDL = 12}; // number of modules in each DDL
40 enum {kCarlosWords = 12}; // number of FIFOCARLOS Words
41 enum {kFifoWords = 4}; // number of FIFO Words
42 enum ESDDRawStreamError {
47 static const Int_t fgkDDLModuleMap[kDDLsNumber][kModulesPerDDL]; // mapping DDL/module -> module number
49 virtual UInt_t ReadBits();
50 virtual Int_t DecompAmbra(Int_t value) const;
52 static const UInt_t fgkCodeLength[8]; //code length
54 UInt_t fData; // data read for file
55 Int_t fSkip[kDDLsNumber];// number of skipped words
56 Int_t fCarlosId; // carlos ID
57 Int_t fEventId; // event ID from header
58 Int_t fChannel; // current channel
59 Int_t fJitter; // jitter between L0 and pascal stop (x25ns)
60 ULong64_t fChannelData[kModulesPerDDL][2];// packed data for the 2 channels
61 UInt_t fLastBit[kModulesPerDDL][2]; // last filled bit in fChannelData
62 UInt_t fChannelCode[kModulesPerDDL][2];// current channel code
63 Bool_t fReadCode[kModulesPerDDL][2]; // next bits are code or data
64 UInt_t fReadBits[kModulesPerDDL][2]; // number of bits to read
65 Int_t fLowThreshold[2]; // low Carlos threshold
66 Int_t fNCarlos; // number of Carlos
67 Int_t fNfifo[kFifoWords];
68 Int_t fTimeBin[kModulesPerDDL][2]; // current timebin [ncarlos][nchannels]
69 Int_t fAnode[kModulesPerDDL][2]; // current anode [ncarlos][nchannels]
70 Int_t fDDL; //current ddl number
71 UInt_t fICarlosWord[kCarlosWords];
72 UInt_t fIFifoWord[kFifoWords];
73 Int_t fICountFoot[kModulesPerDDL];
74 Int_t fIdcd; // fifo counter, for debugging, to be removed when the code is stabilised
75 ClassDef(AliITSRawStreamSDD, 5) // class for reading ITS SDD raw digits