#include "AliITSRawStreamSDD.h"
#include "AliITSRawStreamSDDCompressed.h"
#include "AliRawReader.h"
#include "AliLog.h"
ClassImp(AliITSRawStreamSDD)
const UInt_t AliITSRawStreamSDD::fgkCodeLength[8] = {8, 18, 2, 3, 4, 5, 6, 7};
AliITSRawStreamSDD::AliITSRawStreamSDD(AliRawReader* rawReader) :
AliITSRawStream(rawReader),
fDDLModuleMap(0),
fData(0),
fResetSkip(kTRUE),
fEventId(0),
fCarlosId(-1),
fChannel(0),
fJitter(0),
fEightBitSignal(0),
fDecompressAmbra(kTRUE)
{
Reset();
for(Int_t im=0;im<kSDDModules;im++){
fLowThresholdArray[im][0]=0;
fLowThresholdArray[im][1]=0;
}
for(Int_t i=0;i<kFifoWords;i++) fNfifo[i]=0;
fRawReader->Reset();
fRawReader->Select("ITSSDD");
for(Short_t i=0; i<kCarlosWords; i++) fICarlosWord[i]=0x30000000 + i;
for(Short_t i=0; i<kFifoWords; i++) fIFifoWord[i]=0x30000010 + i;
}
AliITSRawStreamSDD::AliITSRawStreamSDD(const AliITSRawStreamSDD& rs) :
AliITSRawStream(rs.fRawReader),
fDDLModuleMap(rs.fDDLModuleMap),
fData(0),
fResetSkip(kTRUE),
fEventId(0),
fCarlosId(-1),
fChannel(0),
fJitter(0),
fEightBitSignal(0),
fDecompressAmbra(kTRUE)
{
AliError("Copy constructor should not be used.");
}
AliITSRawStreamSDD& AliITSRawStreamSDD::operator=(const AliITSRawStreamSDD& rs) {
if (this!=&rs) {}
AliError("Assignment opertator should not be used.");
return *this;
}
AliITSRawStreamSDD::~AliITSRawStreamSDD(){
if(fDDLModuleMap) delete fDDLModuleMap;
}
UChar_t AliITSRawStreamSDD::ReadBlockAttributes(AliRawReader* rawReader){
UChar_t *data;
rawReader->Reset();
rawReader->Select("ITSSDD");
do{
if(!rawReader->ReadNextData(data)) return 0x0;
}while(rawReader->GetDataSize()==0);
UChar_t attr=rawReader->GetBlockAttributes();
return attr;
}
AliITSRawStream* AliITSRawStreamSDD::CreateRawStreamSDD(AliRawReader* rawReader, UChar_t attributes){
Int_t rawFormat=(attributes&0xE0)>>5;
rawReader->Reset();
AliITSRawStream* inputSDD;
if(rawFormat==0){
inputSDD=new AliITSRawStreamSDDCompressed(rawReader);
inputSDD->SetADCEncoded(kTRUE);
}else{
inputSDD=new AliITSRawStreamSDD(rawReader);
}
return inputSDD;
}
AliITSRawStream* AliITSRawStreamSDD::CreateRawStreamSDD(AliRawReader* rawReader){
UChar_t attr=ReadBlockAttributes(rawReader);
return CreateRawStreamSDD(rawReader,attr);
}
UInt_t AliITSRawStreamSDD::ReadBits()
{
UInt_t result = (fChannelData[fCarlosId][fChannel] & ((1<<fReadBits[fCarlosId][fChannel]) - 1));
fChannelData[fCarlosId][fChannel] >>= fReadBits[fCarlosId][fChannel];
fLastBit[fCarlosId][fChannel] -= fReadBits[fCarlosId][fChannel];
return result;
}
Int_t AliITSRawStreamSDD::DecompAmbra(Int_t value) const
{
if ((value & 0x80) == 0) {
return value & 0x7f;
} else if ((value & 0x40) == 0) {
if(value&1) return 0x080 + ((value & 0x3f) << 1);
return 0x081 + ((value & 0x3f) << 1);
} else if ((value & 0x20) == 0) {
if(value&1) return 0x103 + ((value & 0x1f) << 3);
return 0x104 + ((value & 0x1f) << 3);
} else {
if(value&1) return 0x207 + ((value & 0x1f) << 4);
return 0x208 + ((value & 0x1f) << 4);
}
}
Bool_t AliITSRawStreamSDD::Next()
{
fPrevModuleID = fModuleID;
fCompletedModule=kFALSE;
while (kTRUE) {
if(fResetSkip){
Reset();
Bool_t kSkip = SkipHeaderWord();
if(!kSkip) return kSkip;
fResetSkip=kFALSE;
}
if ((fChannel < 0) || (fCarlosId < 0) || (fChannel >= 2) || (fCarlosId >= kModulesPerDDL) || (fLastBit[fCarlosId][fChannel] < fReadBits[fCarlosId][fChannel]) ) {
if (!fRawReader->ReadNextInt(fData)) return kFALSE;
if((fData >> 16) == 0x7F00){
fJitter = fData&0x000000ff;
fResetSkip=kTRUE;
fCompletedModule=kFALSE;
fCompletedDDL=kTRUE;
return kTRUE;
}
UInt_t nData28= fData >> 28;
UInt_t nData30= fData >> 30;
if (nData28== 0x02) {
fEventId = (fData >> 3) & 0x07FF;
} else if (nData28== 0x03) {
if(fData>=fICarlosWord[0]&&fData<=fICarlosWord[11]) {
fCarlosId = fData-fICarlosWord[0];
Int_t iFifoIdx = fCarlosId/3;
fNfifo[iFifoIdx] = fCarlosId;
} else if (fData>=fIFifoWord[0]&&fData<=fIFifoWord[3]){
fCarlosId = fNfifo[fData-fIFifoWord[0]];
} else if(fData==0x3FFFFFFF && fCarlosId>=0 && fCarlosId<kModulesPerDDL){
fICountFoot[fCarlosId]++;
if(fICountFoot[fCarlosId]==3){
fCompletedModule=kTRUE;
fCompletedDDL=kFALSE;
return kTRUE;
}
} else if(fData==0x3F1F1F1F){
}else{
fRawReader->AddMajorErrorLog(kDataError,"Bad footer");
AliWarning(Form("Invalid data: bad footer %08X\n", fData));
return kFALSE;
}
} else if (nData30 == 0x02 || nData30 == 0x03) {
fChannel = nData30-2;
if(fCarlosId>=0 && fCarlosId<kModulesPerDDL){
fChannelData[fCarlosId][fChannel] +=
(ULong64_t(fData & 0x3FFFFFFF) << fLastBit[fCarlosId][fChannel]);
fLastBit[fCarlosId][fChannel] += 30;
}
} else if (nData28== 0x04) {
} else {
fRawReader->AddMajorErrorLog(kDataFormatErr,Form("Invalid data %8.8x",fData));
AliWarning(Form("Invalid data: %08X\n", fData));
return kFALSE;
}
if(fCarlosId>=0 && fCarlosId <kModulesPerDDL){
Int_t nDDL=fRawReader->GetDDLID();
if(nDDL>=0){
fModuleID = GetModuleNumber(nDDL,fCarlosId);
}
}
} else {
if (fReadCode[fCarlosId][fChannel]) {
fChannelCode[fCarlosId][fChannel] = ReadBits();
fReadCode[fCarlosId][fChannel] = kFALSE;
fReadBits[fCarlosId][fChannel] = fgkCodeLength[fChannelCode[fCarlosId][fChannel]];
} else {
UInt_t data = ReadBits();
fReadCode[fCarlosId][fChannel] = kTRUE;
fReadBits[fCarlosId][fChannel] = 3;
if (fChannelCode[fCarlosId][fChannel] == 0) {
fTimeBin[fCarlosId][fChannel] = data;
} else if (fChannelCode[fCarlosId][fChannel] == 1) {
fTimeBin[fCarlosId][fChannel] = 0;
fAnode[fCarlosId][fChannel]++;
} else {
fEightBitSignal=data + (1 << fChannelCode[fCarlosId][fChannel]);
if(fDecompressAmbra) fSignal = DecompAmbra(fEightBitSignal + fLowThresholdArray[fModuleID-kSPDModules][fChannel]);
fCoord1 = fAnode[fCarlosId][fChannel];
fCoord2 = fTimeBin[fCarlosId][fChannel];
fTimeBin[fCarlosId][fChannel]++;
fCompletedModule=kFALSE;
fCompletedDDL=kFALSE;
return kTRUE;
}
}
}
}
return kFALSE;
}
void AliITSRawStreamSDD::Reset(){
for(Int_t i=0;i<2;i++){
for(Int_t ic=0;ic<kModulesPerDDL;ic++){
fChannelData[ic][i]=0;
fLastBit[ic][i]=0;
fChannelCode[ic][i]=0;
fReadCode[ic][i]=kTRUE;
fReadBits[ic][i]=3;
fTimeBin[ic][i]=0;
fAnode[ic][i]=0;
fICountFoot[ic]=0;
}
}
}
Bool_t AliITSRawStreamSDD::SkipHeaderWord(){
while (kTRUE) {
if (!fRawReader->ReadNextInt(fData)) return kFALSE;
if ((fData >> 30) == 0x01) continue;
if(fData==0xFFFFFFFF) return kTRUE;
}
}
AliITSRawStreamSDD.cxx:10 AliITSRawStreamSDD.cxx:11 AliITSRawStreamSDD.cxx:12 AliITSRawStreamSDD.cxx:13 AliITSRawStreamSDD.cxx:14 AliITSRawStreamSDD.cxx:15 AliITSRawStreamSDD.cxx:16 AliITSRawStreamSDD.cxx:17 AliITSRawStreamSDD.cxx:18 AliITSRawStreamSDD.cxx:19 AliITSRawStreamSDD.cxx:20 AliITSRawStreamSDD.cxx:21 AliITSRawStreamSDD.cxx:22 AliITSRawStreamSDD.cxx:23 AliITSRawStreamSDD.cxx:24 AliITSRawStreamSDD.cxx:25 AliITSRawStreamSDD.cxx:26 AliITSRawStreamSDD.cxx:27 AliITSRawStreamSDD.cxx:28 AliITSRawStreamSDD.cxx:29 AliITSRawStreamSDD.cxx:30 AliITSRawStreamSDD.cxx:31 AliITSRawStreamSDD.cxx:32 AliITSRawStreamSDD.cxx:33 AliITSRawStreamSDD.cxx:34 AliITSRawStreamSDD.cxx:35 AliITSRawStreamSDD.cxx:36 AliITSRawStreamSDD.cxx:37 AliITSRawStreamSDD.cxx:38 AliITSRawStreamSDD.cxx:39 AliITSRawStreamSDD.cxx:40 AliITSRawStreamSDD.cxx:41 AliITSRawStreamSDD.cxx:42 AliITSRawStreamSDD.cxx:43 AliITSRawStreamSDD.cxx:44 AliITSRawStreamSDD.cxx:45 AliITSRawStreamSDD.cxx:46 AliITSRawStreamSDD.cxx:47 AliITSRawStreamSDD.cxx:48 AliITSRawStreamSDD.cxx:49 AliITSRawStreamSDD.cxx:50 AliITSRawStreamSDD.cxx:51 AliITSRawStreamSDD.cxx:52 AliITSRawStreamSDD.cxx:53 AliITSRawStreamSDD.cxx:54 AliITSRawStreamSDD.cxx:55 AliITSRawStreamSDD.cxx:56 AliITSRawStreamSDD.cxx:57 AliITSRawStreamSDD.cxx:58 AliITSRawStreamSDD.cxx:59 AliITSRawStreamSDD.cxx:60 AliITSRawStreamSDD.cxx:61 AliITSRawStreamSDD.cxx:62 AliITSRawStreamSDD.cxx:63 AliITSRawStreamSDD.cxx:64 AliITSRawStreamSDD.cxx:65 AliITSRawStreamSDD.cxx:66 AliITSRawStreamSDD.cxx:67 AliITSRawStreamSDD.cxx:68 AliITSRawStreamSDD.cxx:69 AliITSRawStreamSDD.cxx:70 AliITSRawStreamSDD.cxx:71 AliITSRawStreamSDD.cxx:72 AliITSRawStreamSDD.cxx:73 AliITSRawStreamSDD.cxx:74 AliITSRawStreamSDD.cxx:75 AliITSRawStreamSDD.cxx:76 AliITSRawStreamSDD.cxx:77 AliITSRawStreamSDD.cxx:78 AliITSRawStreamSDD.cxx:79 AliITSRawStreamSDD.cxx:80 AliITSRawStreamSDD.cxx:81 AliITSRawStreamSDD.cxx:82 AliITSRawStreamSDD.cxx:83 AliITSRawStreamSDD.cxx:84 AliITSRawStreamSDD.cxx:85 AliITSRawStreamSDD.cxx:86 AliITSRawStreamSDD.cxx:87 AliITSRawStreamSDD.cxx:88 AliITSRawStreamSDD.cxx:89 AliITSRawStreamSDD.cxx:90 AliITSRawStreamSDD.cxx:91 AliITSRawStreamSDD.cxx:92 AliITSRawStreamSDD.cxx:93 AliITSRawStreamSDD.cxx:94 AliITSRawStreamSDD.cxx:95 AliITSRawStreamSDD.cxx:96 AliITSRawStreamSDD.cxx:97 AliITSRawStreamSDD.cxx:98 AliITSRawStreamSDD.cxx:99 AliITSRawStreamSDD.cxx:100 AliITSRawStreamSDD.cxx:101 AliITSRawStreamSDD.cxx:102 AliITSRawStreamSDD.cxx:103 AliITSRawStreamSDD.cxx:104 AliITSRawStreamSDD.cxx:105 AliITSRawStreamSDD.cxx:106 AliITSRawStreamSDD.cxx:107 AliITSRawStreamSDD.cxx:108 AliITSRawStreamSDD.cxx:109 AliITSRawStreamSDD.cxx:110 AliITSRawStreamSDD.cxx:111 AliITSRawStreamSDD.cxx:112 AliITSRawStreamSDD.cxx:113 AliITSRawStreamSDD.cxx:114 AliITSRawStreamSDD.cxx:115 AliITSRawStreamSDD.cxx:116 AliITSRawStreamSDD.cxx:117 AliITSRawStreamSDD.cxx:118 AliITSRawStreamSDD.cxx:119 AliITSRawStreamSDD.cxx:120 AliITSRawStreamSDD.cxx:121 AliITSRawStreamSDD.cxx:122 AliITSRawStreamSDD.cxx:123 AliITSRawStreamSDD.cxx:124 AliITSRawStreamSDD.cxx:125 AliITSRawStreamSDD.cxx:126 AliITSRawStreamSDD.cxx:127 AliITSRawStreamSDD.cxx:128 AliITSRawStreamSDD.cxx:129 AliITSRawStreamSDD.cxx:130 AliITSRawStreamSDD.cxx:131 AliITSRawStreamSDD.cxx:132 AliITSRawStreamSDD.cxx:133 AliITSRawStreamSDD.cxx:134 AliITSRawStreamSDD.cxx:135 AliITSRawStreamSDD.cxx:136 AliITSRawStreamSDD.cxx:137 AliITSRawStreamSDD.cxx:138 AliITSRawStreamSDD.cxx:139 AliITSRawStreamSDD.cxx:140 AliITSRawStreamSDD.cxx:141 AliITSRawStreamSDD.cxx:142 AliITSRawStreamSDD.cxx:143 AliITSRawStreamSDD.cxx:144 AliITSRawStreamSDD.cxx:145 AliITSRawStreamSDD.cxx:146 AliITSRawStreamSDD.cxx:147 AliITSRawStreamSDD.cxx:148 AliITSRawStreamSDD.cxx:149 AliITSRawStreamSDD.cxx:150 AliITSRawStreamSDD.cxx:151 AliITSRawStreamSDD.cxx:152 AliITSRawStreamSDD.cxx:153 AliITSRawStreamSDD.cxx:154 AliITSRawStreamSDD.cxx:155 AliITSRawStreamSDD.cxx:156 AliITSRawStreamSDD.cxx:157 AliITSRawStreamSDD.cxx:158 AliITSRawStreamSDD.cxx:159 AliITSRawStreamSDD.cxx:160 AliITSRawStreamSDD.cxx:161 AliITSRawStreamSDD.cxx:162 AliITSRawStreamSDD.cxx:163 AliITSRawStreamSDD.cxx:164 AliITSRawStreamSDD.cxx:165 AliITSRawStreamSDD.cxx:166 AliITSRawStreamSDD.cxx:167 AliITSRawStreamSDD.cxx:168 AliITSRawStreamSDD.cxx:169 AliITSRawStreamSDD.cxx:170 AliITSRawStreamSDD.cxx:171 AliITSRawStreamSDD.cxx:172 AliITSRawStreamSDD.cxx:173 AliITSRawStreamSDD.cxx:174 AliITSRawStreamSDD.cxx:175 AliITSRawStreamSDD.cxx:176 AliITSRawStreamSDD.cxx:177 AliITSRawStreamSDD.cxx:178 AliITSRawStreamSDD.cxx:179 AliITSRawStreamSDD.cxx:180 AliITSRawStreamSDD.cxx:181 AliITSRawStreamSDD.cxx:182 AliITSRawStreamSDD.cxx:183 AliITSRawStreamSDD.cxx:184 AliITSRawStreamSDD.cxx:185 AliITSRawStreamSDD.cxx:186 AliITSRawStreamSDD.cxx:187 AliITSRawStreamSDD.cxx:188 AliITSRawStreamSDD.cxx:189 AliITSRawStreamSDD.cxx:190 AliITSRawStreamSDD.cxx:191 AliITSRawStreamSDD.cxx:192 AliITSRawStreamSDD.cxx:193 AliITSRawStreamSDD.cxx:194 AliITSRawStreamSDD.cxx:195 AliITSRawStreamSDD.cxx:196 AliITSRawStreamSDD.cxx:197 AliITSRawStreamSDD.cxx:198 AliITSRawStreamSDD.cxx:199 AliITSRawStreamSDD.cxx:200 AliITSRawStreamSDD.cxx:201 AliITSRawStreamSDD.cxx:202 AliITSRawStreamSDD.cxx:203 AliITSRawStreamSDD.cxx:204 AliITSRawStreamSDD.cxx:205 AliITSRawStreamSDD.cxx:206 AliITSRawStreamSDD.cxx:207 AliITSRawStreamSDD.cxx:208 AliITSRawStreamSDD.cxx:209 AliITSRawStreamSDD.cxx:210 AliITSRawStreamSDD.cxx:211 AliITSRawStreamSDD.cxx:212 AliITSRawStreamSDD.cxx:213 AliITSRawStreamSDD.cxx:214 AliITSRawStreamSDD.cxx:215 AliITSRawStreamSDD.cxx:216 AliITSRawStreamSDD.cxx:217 AliITSRawStreamSDD.cxx:218 AliITSRawStreamSDD.cxx:219 AliITSRawStreamSDD.cxx:220 AliITSRawStreamSDD.cxx:221 AliITSRawStreamSDD.cxx:222 AliITSRawStreamSDD.cxx:223 AliITSRawStreamSDD.cxx:224 AliITSRawStreamSDD.cxx:225 AliITSRawStreamSDD.cxx:226 AliITSRawStreamSDD.cxx:227 AliITSRawStreamSDD.cxx:228 AliITSRawStreamSDD.cxx:229 AliITSRawStreamSDD.cxx:230 AliITSRawStreamSDD.cxx:231 AliITSRawStreamSDD.cxx:232 AliITSRawStreamSDD.cxx:233 AliITSRawStreamSDD.cxx:234 AliITSRawStreamSDD.cxx:235 AliITSRawStreamSDD.cxx:236 AliITSRawStreamSDD.cxx:237 AliITSRawStreamSDD.cxx:238 AliITSRawStreamSDD.cxx:239 AliITSRawStreamSDD.cxx:240 AliITSRawStreamSDD.cxx:241 AliITSRawStreamSDD.cxx:242 AliITSRawStreamSDD.cxx:243 AliITSRawStreamSDD.cxx:244 AliITSRawStreamSDD.cxx:245 AliITSRawStreamSDD.cxx:246 AliITSRawStreamSDD.cxx:247 AliITSRawStreamSDD.cxx:248 AliITSRawStreamSDD.cxx:249 AliITSRawStreamSDD.cxx:250 AliITSRawStreamSDD.cxx:251 AliITSRawStreamSDD.cxx:252 AliITSRawStreamSDD.cxx:253 AliITSRawStreamSDD.cxx:254 AliITSRawStreamSDD.cxx:255 AliITSRawStreamSDD.cxx:256 AliITSRawStreamSDD.cxx:257 AliITSRawStreamSDD.cxx:258 AliITSRawStreamSDD.cxx:259 AliITSRawStreamSDD.cxx:260 AliITSRawStreamSDD.cxx:261 AliITSRawStreamSDD.cxx:262 AliITSRawStreamSDD.cxx:263 AliITSRawStreamSDD.cxx:264 AliITSRawStreamSDD.cxx:265 AliITSRawStreamSDD.cxx:266 AliITSRawStreamSDD.cxx:267 AliITSRawStreamSDD.cxx:268 AliITSRawStreamSDD.cxx:269 AliITSRawStreamSDD.cxx:270 AliITSRawStreamSDD.cxx:271 AliITSRawStreamSDD.cxx:272 AliITSRawStreamSDD.cxx:273 AliITSRawStreamSDD.cxx:274 AliITSRawStreamSDD.cxx:275 AliITSRawStreamSDD.cxx:276 AliITSRawStreamSDD.cxx:277 AliITSRawStreamSDD.cxx:278 AliITSRawStreamSDD.cxx:279 AliITSRawStreamSDD.cxx:280 AliITSRawStreamSDD.cxx:281 AliITSRawStreamSDD.cxx:282 AliITSRawStreamSDD.cxx:283 AliITSRawStreamSDD.cxx:284 AliITSRawStreamSDD.cxx:285 AliITSRawStreamSDD.cxx:286 AliITSRawStreamSDD.cxx:287