]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - ITS/AliITSRawStreamSDD.h
Fixes for Git
[u/mrichter/AliRoot.git] / ITS / AliITSRawStreamSDD.h
... / ...
CommitLineData
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 */
5
6/* $Id$ */
7
8///////////////////////////////////////////////////////////////////////////////
9///
10/// This class provides access to ITS SDD digits in raw data
11/// (default=simulated data).
12///////////////////////////////////////////////////////////////////////////////
13
14#include "AliITSRawStream.h"
15#include "AliITSDDLModuleMapSDD.h"
16
17class AliRawReader;
18
19
20class AliITSRawStreamSDD: public AliITSRawStream {
21 public :
22 AliITSRawStreamSDD(AliRawReader* rawReader);
23 AliITSRawStreamSDD(const AliITSRawStreamSDD& rs);
24 AliITSRawStreamSDD& operator=(const AliITSRawStreamSDD& rs);
25 virtual ~AliITSRawStreamSDD();
26
27 static UChar_t ReadBlockAttributes(AliRawReader* rawReader);
28 static UInt_t ReadAMSamplFreqFromCDH(UChar_t cdhAttr){
29 if(cdhAttr&0x10) return 40;
30 else return 20;
31 }
32 static AliITSRawStream* CreateRawStreamSDD(AliRawReader* rawReader, UChar_t attributes);
33 static AliITSRawStream* CreateRawStreamSDD(AliRawReader* rawReader);
34
35 virtual Bool_t Next();
36
37 virtual Int_t GetAnode() const {return fCoord1;}
38 virtual Int_t GetTime() const {return fCoord2;}
39 virtual Int_t GetChannel() const {return fChannel;}
40 virtual Int_t GetEightBitSignal() const {return fEightBitSignal;}
41 virtual Int_t GetCarlosId() const {return fCarlosId;}
42 virtual Int_t GetEventId() const {return fEventId;}
43 virtual Int_t GetJitter() const {return fJitter;}
44
45
46 virtual void SetDecompressAmbra(Bool_t deco=kTRUE){
47 fDecompressAmbra=deco;
48 }
49 virtual void SetDDLModuleMap(AliITSDDLModuleMapSDD* ddlsdd){
50 if(!fDDLModuleMap) fDDLModuleMap=new AliITSDDLModuleMapSDD();
51 fDDLModuleMap->SetDDLMap(ddlsdd);
52 }
53 virtual void SetZeroSuppLowThreshold(Int_t iMod, Int_t iSid, Int_t th)
54 {fLowThresholdArray[iMod][iSid]=th;}
55 Int_t GetModuleNumber(UInt_t iDDL, UInt_t iModule) const {
56 if(!fDDLModuleMap) return kSPDModules+1; // dummy module number if the DDL map is not set (case of DAs)
57 return fDDLModuleMap->GetModuleNumber(iDDL,iModule);
58 }
59 virtual void Reset();
60
61 enum {kSDDModules = 260}; // number of SDD modules
62 enum {kSPDModules = 240}; // number of SPD modules (used as offset)
63 enum {kDDLsNumber = 24}; // number of DDLs in SDD
64 enum {kModulesPerDDL = 12}; // number of modules in each DDL
65 enum {kCarlosWords = 12}; // number of FIFOCARLOS Words
66 enum {kFifoWords = 4}; // number of FIFO Words
67 enum ESDDRawStreamError {
68 kDataError = 1,
69 kDataFormatErr = 2
70 };
71 protected:
72 virtual Bool_t SkipHeaderWord();
73 virtual UInt_t ReadBits();
74 virtual Int_t DecompAmbra(Int_t value) const;
75
76 static const UInt_t fgkCodeLength[8]; //code length
77
78 AliITSDDLModuleMapSDD* fDDLModuleMap; // mapping DDL/module -> module number
79 UInt_t fData; // data read for file
80 Bool_t fResetSkip; // flag for end of DDL data
81
82 Int_t fEventId; // event ID from header
83 Int_t fCarlosId; // carlos ID
84 Int_t fChannel; // current channel
85 Int_t fJitter; // jitter between L0 and pascal stop (x25ns)
86 ULong64_t fChannelData[kModulesPerDDL][2];// packed data for the 2 channels
87 UInt_t fLastBit[kModulesPerDDL][2]; // last filled bit in fChannelData
88 UInt_t fChannelCode[kModulesPerDDL][2];// current channel code
89 Bool_t fReadCode[kModulesPerDDL][2]; // next bits are code or data
90 UInt_t fReadBits[kModulesPerDDL][2]; // number of bits to read
91 Int_t fLowThresholdArray[kSDDModules][2]; // array with low thresholds for all modules
92
93 Int_t fNfifo[kFifoWords]; // FIFO number
94 Int_t fTimeBin[kModulesPerDDL][2]; // current timebin [ncarlos][nchannels]
95 Int_t fAnode[kModulesPerDDL][2]; // current anode [ncarlos][nchannels]
96 UInt_t fICarlosWord[kCarlosWords]; // Carlos words
97 UInt_t fIFifoWord[kFifoWords]; // FIFO words
98 Int_t fICountFoot[kModulesPerDDL]; // counter for carlos footer words
99 Int_t fEightBitSignal; // signal at 8 bit
100 Bool_t fDecompressAmbra; //flag to switch off decompression
101
102 ClassDef(AliITSRawStreamSDD, 14) // class for reading ITS SDD raw digits
103};
104
105#endif