]>
Commit | Line | Data |
---|---|---|
7765ca40 | 1 | /************************************************************************** |
2 | * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
16 | /* $Id $*/ | |
17 | ||
18 | /////////////////////////////////////////////////////////////////// | |
19 | // // | |
20 | // Class to decode compressed SDD Raw Data format // | |
21 | // The 32 bits for a data word are defined as follows: // | |
22 | // 31 control bit (0=data word, 1= control word) // | |
23 | // 30 - // | |
24 | // 29 | // | |
25 | // 28 |-> 4 bits to identify the Carlos (0-11) inside the DDL // | |
26 | // 27 - // | |
27 | // 26 detecot side (0= left, =right) // | |
28 | // 25 - // | |
29 | // 24 | // | |
30 | // 23 | // | |
31 | // 22 | // | |
32 | // 21 |-> 8 bits to identify the anode number (0-255) // | |
33 | // 20 | // | |
34 | // 19 | // | |
35 | // 18 - // | |
36 | // 17 - // | |
37 | // 16 | // | |
38 | // 15 | // | |
39 | // 14 | // | |
40 | // 13 |-> 8 bits to identify the time bin (0-255) // | |
41 | // 12 | // | |
42 | // 11 | // | |
43 | // 10 - // | |
44 | // 9 - // | |
45 | // 8 | // | |
46 | // 7 | // | |
47 | // 6 | // | |
48 | // 5 | // | |
49 | // 4 |-> 10 bit for the ADC counts // | |
50 | // 3 | // | |
51 | // 2 | // | |
52 | // 1 | // | |
53 | // 0 - // | |
54 | // // | |
55 | // Plus 2 types of control words: // | |
56 | // - DDL identifier with the 4 more significant bits = 1000 // | |
57 | // - End of module data (needed by the Cluster Finder) = 1111 // | |
58 | // // | |
59 | // Origin: F.Prino, Torino, prino@to.infn.it // | |
60 | // // | |
61 | /////////////////////////////////////////////////////////////////// | |
62 | ||
63 | ||
64 | ||
65 | #include "AliITSRawStreamSDDCompressed.h" | |
66 | #include "AliRawReader.h" | |
67 | #include "AliLog.h" | |
68 | ||
69 | ClassImp(AliITSRawStreamSDDCompressed) | |
70 | ||
71 | ||
72 | ||
73 | //______________________________________________________________________ | |
74 | AliITSRawStreamSDDCompressed::AliITSRawStreamSDDCompressed(AliRawReader* rawReader) : | |
75 | AliITSRawStream(rawReader), | |
76 | fDDLModuleMap(0), | |
77 | fData(0), | |
78 | fCarlosId(-1), | |
79 | fChannel(0), | |
80 | fJitter(0), | |
81 | fDDL(0) | |
82 | { | |
83 | // create an object to read ITS SDD raw digits | |
84 | fDDLModuleMap=new AliITSDDLModuleMapSDD(); | |
85 | fDDLModuleMap->SetDefaultMap(); | |
86 | for(Int_t im=0;im<kSDDModules;im++){ | |
87 | fLowThresholdArray[im][0]=0; | |
88 | fLowThresholdArray[im][1]=0; | |
89 | } | |
90 | fRawReader->Reset(); | |
91 | fRawReader->Select("ITSSDD"); | |
92 | ||
93 | ||
94 | } | |
95 | ||
96 | //______________________________________________________________________ | |
97 | AliITSRawStreamSDDCompressed::AliITSRawStreamSDDCompressed(const AliITSRawStreamSDDCompressed& rs) : | |
98 | AliITSRawStream(rs.fRawReader), | |
99 | fDDLModuleMap(rs.fDDLModuleMap), | |
100 | fData(0), | |
101 | fCarlosId(-1), | |
102 | fChannel(0), | |
103 | fJitter(0), | |
104 | fDDL(0) | |
105 | { | |
106 | // copy constructor | |
107 | AliError("Copy constructor should not be used."); | |
108 | } | |
109 | //__________________________________________________________________________ | |
110 | AliITSRawStreamSDDCompressed& AliITSRawStreamSDDCompressed::operator=(const AliITSRawStreamSDDCompressed& rs) { | |
111 | // assignment operator | |
112 | if (this!=&rs) {} | |
113 | AliError("Assignment opertator should not be used."); | |
114 | return *this; | |
115 | } | |
116 | ||
117 | //______________________________________________________________________ | |
118 | AliITSRawStreamSDDCompressed::~AliITSRawStreamSDDCompressed(){ | |
119 | if(fDDLModuleMap) delete fDDLModuleMap; | |
120 | } | |
121 | ||
122 | ||
123 | //______________________________________________________________________ | |
124 | Bool_t AliITSRawStreamSDDCompressed::Next() | |
125 | { | |
126 | // read the next raw digit | |
127 | // returns kFALSE if there is no digit left | |
128 | // returns kTRUE and fCompletedModule=kFALSE when a digit is found | |
129 | // returns kTRUE and fCompletedModule=kTRUE when a module is completed | |
130 | ||
f7bcb379 | 131 | |
132 | // UInt_t masksod=8; // start of DDL has the 4 most significant bits = 1000 | |
7765ca40 | 133 | UInt_t maskeom=15; // end of module has the 4 most significant bits = 1111 |
134 | UInt_t maskmod=15; // last 4 bits for module number in end of module word | |
f7bcb379 | 135 | // UInt_t maskDDL=0xFF; // last 8 bits for DDL number in start of DDL word |
136 | ||
7765ca40 | 137 | UInt_t maskCarlos=15<<27; // 4 bits (27-30) for CarlosId in data word |
138 | UInt_t maskSide=1<<26; // 1 bit (26) for side in data word | |
139 | UInt_t maskAnode=255<<18; // 8 bits (18-25) for Nanode in data word | |
140 | UInt_t maskTb=255<<10; // 8 bits (10-27) for Ntimebin in data word | |
141 | UInt_t maskADC=1023; // 10 bits (0-9) for ADC in data word | |
f7bcb379 | 142 | |
143 | while(kTRUE){ | |
f7bcb379 | 144 | if (!fRawReader->ReadNextInt(fData)) return kFALSE; // read next word |
145 | UInt_t mostsigbits=fData>>28; | |
146 | if(mostsigbits==maskeom){ | |
147 | fCarlosId=fData&maskmod; | |
cb6d8373 | 148 | fDDL=fRawReader->GetDDLID(); |
f7bcb379 | 149 | fModuleID = GetModuleNumber(fDDL,fCarlosId); |
150 | fCompletedModule=kTRUE; | |
151 | return kTRUE; | |
152 | }else{ | |
153 | fCarlosId=(fData&maskCarlos)>>27; | |
cb6d8373 | 154 | fDDL=fRawReader->GetDDLID(); |
f7bcb379 | 155 | fModuleID = GetModuleNumber(fDDL,fCarlosId); |
156 | fChannel=(fData&maskSide)>>26; | |
157 | fCoord1=(fData&maskAnode)>>18; | |
158 | fCoord2=(fData&maskTb)>>10; | |
159 | fSignal=fData&maskADC; | |
160 | fSignal+=fLowThresholdArray[fModuleID-kSPDModules][fChannel]; | |
161 | fCompletedModule=kFALSE; | |
162 | return kTRUE; | |
163 | } | |
7765ca40 | 164 | } |
165 | return kFALSE; | |
166 | } | |
167 | ||
168 |