From 6297cc01e06cddd751d69859b4da51a0a33d4e0c Mon Sep 17 00:00:00 2001 From: prino Date: Wed, 3 Sep 2008 23:31:42 +0000 Subject: [PATCH] Modifs to have 8 bit ADC values in the compressed format of SDD raw data (F. Prino) --- ITS/AliITSClusterFinderV2SDD.cxx | 4 ++-- ITS/AliITSCompressRawDataSDD.cxx | 12 ++++-------- ITS/AliITSDDLRawData.cxx | 2 +- ITS/AliITSRawStream.h | 8 ++++++++ ITS/AliITSRawStreamSDD.cxx | 11 ++++++++--- ITS/AliITSRawStreamSDD.h | 9 ++++++++- ITS/AliITSRawStreamSDDCompressed.cxx | 21 +++++++++++++++++++-- ITS/AliITSRawStreamSDDCompressed.h | 2 +- 8 files changed, 51 insertions(+), 18 deletions(-) diff --git a/ITS/AliITSClusterFinderV2SDD.cxx b/ITS/AliITSClusterFinderV2SDD.cxx index 2974037e55c..28b20a366f4 100644 --- a/ITS/AliITSClusterFinderV2SDD.cxx +++ b/ITS/AliITSClusterFinderV2SDD.cxx @@ -329,8 +329,8 @@ void AliITSClusterFinderV2SDD::FindClustersSDD(AliITSRawStream* input, continue; } - Int_t iCarlos =((AliITSRawStreamSDD*)input)->GetCarlosId(); - Int_t iSide = ((AliITSRawStreamSDD*)input)->GetChannel(); + Int_t iCarlos =input->GetCarlosId(); + Int_t iSide = input->GetChannel(); Int_t iHybrid=iCarlos*2+iSide; if (input->IsCompletedModule()) { // when all data from a module was read, search for clusters diff --git a/ITS/AliITSCompressRawDataSDD.cxx b/ITS/AliITSCompressRawDataSDD.cxx index feae4b41903..513741a3353 100644 --- a/ITS/AliITSCompressRawDataSDD.cxx +++ b/ITS/AliITSCompressRawDataSDD.cxx @@ -121,19 +121,14 @@ void AliITSCompressRawDataSDD::Compress(){ rd->Reset(); AliITSRawStreamSDD s(rd); + s.SetDecompressAmbra(kFALSE); while(s.Next()){ - if(rd->GetDDLID()!=oldddl){ - word=8<<28; - word+=rd->GetDDLID(); - fprintf(outtxt,"%08X\n",word); - oldddl=rd->GetDDLID(); - } if(s.IsCompletedModule()==kFALSE){ word=s.GetCarlosId()<<27; word+=s.GetChannel()<<26; word+=s.GetCoord1()<<18; word+=s.GetCoord2()<<10; - word+=s.GetSignal(); + word+=s.GetEightBitSignal(); fprintf(outtxt,"%08X\n",word); } if(s.IsCompletedModule()==kTRUE){ @@ -156,6 +151,7 @@ UInt_t AliITSCompressRawDataSDD::CompressEvent(UChar_t* inputPtr){ siz+=32; UInt_t word=0; AliITSRawStreamSDD s(fRawReader); + s.SetDecompressAmbra(kFALSE); Int_t mask1=0xFF000000; Int_t mask2=0x00FF0000; Int_t mask3=0x0000FF00; @@ -166,7 +162,7 @@ UInt_t AliITSCompressRawDataSDD::CompressEvent(UChar_t* inputPtr){ word+=s.GetChannel()<<26; word+=s.GetCoord1()<<18; word+=s.GetCoord2()<<10; - word+=s.GetSignal(); + word+=s.GetEightBitSignal(); if(siz+4>24; ++fPointerToData; diff --git a/ITS/AliITSDDLRawData.cxx b/ITS/AliITSDDLRawData.cxx index 42025756ba2..9cde520cbf4 100644 --- a/ITS/AliITSDDLRawData.cxx +++ b/ITS/AliITSDDLRawData.cxx @@ -140,7 +140,7 @@ void AliITSDDLRawData::GetDigitsSDDCompressed(TClonesArray *ITSdigits, Int_t mod digs = (AliITSdigit*)ITSdigits->UncheckedAt(digit); Int_t iz=digs->GetCoord1(); // Anode Int_t ix=digs->GetCoord2(); // Time - Int_t is=digs->GetSignal(); // ADC Signal - 10 bit + Int_t is=digs->GetCompressedSignal(); // ADC Signal - 8 bit dataWord=mod<<27; Int_t sid=0; if(iz>=256){ diff --git a/ITS/AliITSRawStream.h b/ITS/AliITSRawStream.h index b4e5bc72f0b..112c93d44b9 100644 --- a/ITS/AliITSRawStream.h +++ b/ITS/AliITSRawStream.h @@ -40,6 +40,14 @@ class AliITSRawStream: public TObject { virtual void SetZeroSuppLowThreshold(Int_t /*iMod*/, Int_t /*iSid*/, Int_t /*th*/) { AliError("This method must be implemented in a derived class"); }; + virtual Int_t GetCarlosId() const { + AliError("This method must be implemented in a derived class"); + return -1; + }; + virtual Int_t GetChannel() const { + AliError("This method must be implemented in a derived class"); + return -1; + }; protected : diff --git a/ITS/AliITSRawStreamSDD.cxx b/ITS/AliITSRawStreamSDD.cxx index 6015a34f1f4..6cca48d4525 100644 --- a/ITS/AliITSRawStreamSDD.cxx +++ b/ITS/AliITSRawStreamSDD.cxx @@ -38,7 +38,9 @@ fEventId(0), fCarlosId(-1), fChannel(0), fJitter(0), -fResetSkip(0) +fResetSkip(0), +fEightBitSignal(0), +fDecompressAmbra(kTRUE) { // create an object to read ITS SDD raw digits fDDLModuleMap=new AliITSDDLModuleMapSDD(); @@ -66,7 +68,9 @@ fEventId(0), fCarlosId(-1), fChannel(0), fJitter(0), -fResetSkip(0) +fResetSkip(0), +fEightBitSignal(0), +fDecompressAmbra(kTRUE) { // copy constructor AliError("Copy constructor should not be used."); @@ -197,7 +201,8 @@ Bool_t AliITSRawStreamSDD::Next() fTimeBin[fCarlosId][fChannel] = 0; fAnode[fCarlosId][fChannel]++; } else { // ADC signal data - fSignal = DecompAmbra(data + (1 << fChannelCode[fCarlosId][fChannel]) + fLowThresholdArray[fModuleID-kSPDModules][fChannel]); + 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]++; diff --git a/ITS/AliITSRawStreamSDD.h b/ITS/AliITSRawStreamSDD.h index b42ba6e0f0d..7ef3a0b9d4f 100644 --- a/ITS/AliITSRawStreamSDD.h +++ b/ITS/AliITSRawStreamSDD.h @@ -29,10 +29,14 @@ class AliITSRawStreamSDD: public AliITSRawStream { virtual Int_t GetAnode() const {return fCoord1;} virtual Int_t GetTime() const {return fCoord2;} virtual Int_t GetChannel() const {return fChannel;} + virtual Int_t GetEightBitSignal() const {return fEightBitSignal;} virtual Int_t ReadJitter() const {return 0;} virtual Int_t GetCarlosId() const {return fCarlosId;} virtual Int_t GetEventId() const {return fEventId;} + virtual void SetDecompressAmbra(Bool_t deco=kTRUE){ + fDecompressAmbra=deco; + } virtual void SetDDLModuleMap(AliITSDDLModuleMapSDD* ddlsdd){fDDLModuleMap->SetDDLMap(ddlsdd);} virtual void SetLowCarlosThreshold(Int_t th, Int_t i) {fLowThreshold[i]=th;} @@ -81,7 +85,10 @@ class AliITSRawStreamSDD: public AliITSRawStream { UInt_t fIFifoWord[kFifoWords]; // FIFO words Int_t fICountFoot[kModulesPerDDL]; // counter for carlos footer words Int_t fResetSkip; //if it is 0, the ResetSkip Funcion is called - ClassDef(AliITSRawStreamSDD, 11) // class for reading ITS SDD raw digits + Int_t fEightBitSignal; // signal at 8 bit + Bool_t fDecompressAmbra; //flag to switch off decompression + + ClassDef(AliITSRawStreamSDD, 12) // class for reading ITS SDD raw digits }; #endif diff --git a/ITS/AliITSRawStreamSDDCompressed.cxx b/ITS/AliITSRawStreamSDDCompressed.cxx index 89ef17e69bf..11bf8ac2380 100644 --- a/ITS/AliITSRawStreamSDDCompressed.cxx +++ b/ITS/AliITSRawStreamSDDCompressed.cxx @@ -120,6 +120,22 @@ AliITSRawStreamSDDCompressed::~AliITSRawStreamSDDCompressed(){ } +//______________________________________________________________________ +Int_t AliITSRawStreamSDDCompressed::DecompAmbra(Int_t value) const +{ + // AMBRA decompression (from 8 to 10 bit) + + if ((value & 0x80) == 0) { + return value & 0x7f; + } else if ((value & 0x40) == 0) { + return 0x081 + ((value & 0x3f) << 1); + } else if ((value & 0x20) == 0) { + return 0x104 + ((value & 0x1f) << 3); + } else { + return 0x208 + ((value & 0x1f) << 4); + } + +} //______________________________________________________________________ Bool_t AliITSRawStreamSDDCompressed::Next() { @@ -156,8 +172,9 @@ Bool_t AliITSRawStreamSDDCompressed::Next() fChannel=(fData&maskSide)>>26; fCoord1=(fData&maskAnode)>>18; fCoord2=(fData&maskTb)>>10; - fSignal=fData&maskADC; - fSignal+=fLowThresholdArray[fModuleID-kSPDModules][fChannel]; + Int_t sig8bit=fData&maskADC; + sig8bit+=fLowThresholdArray[fModuleID-kSPDModules][fChannel]; + fSignal=DecompAmbra(sig8bit); fCompletedModule=kFALSE; return kTRUE; } diff --git a/ITS/AliITSRawStreamSDDCompressed.h b/ITS/AliITSRawStreamSDDCompressed.h index 1914fba6a01..9e09868046d 100644 --- a/ITS/AliITSRawStreamSDDCompressed.h +++ b/ITS/AliITSRawStreamSDDCompressed.h @@ -52,7 +52,7 @@ class AliITSRawStreamSDDCompressed: public AliITSRawStream { }; protected: - + virtual Int_t DecompAmbra(Int_t value) const; AliITSDDLModuleMapSDD* fDDLModuleMap; // mapping DDL/module -> module number UInt_t fData; // data read for file Int_t fCarlosId; // carlos ID -- 2.39.3