Add option for decoding of Raw Data format presently implemented in CarlosRX firmware...
authorprino <prino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 15 Apr 2009 16:58:37 +0000 (16:58 +0000)
committerprino <prino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 15 Apr 2009 16:58:37 +0000 (16:58 +0000)
ITS/AliITSRawStreamSDDCompressed.cxx
ITS/AliITSRawStreamSDDCompressed.h

index 0f63c61..87964d9 100644 (file)
@@ -73,12 +73,13 @@ ClassImp(AliITSRawStreamSDDCompressed)
 //______________________________________________________________________
 AliITSRawStreamSDDCompressed::AliITSRawStreamSDDCompressed(AliRawReader* rawReader) :
   AliITSRawStream(rawReader),
-fDDLModuleMap(0),
-fData(0),
-fCarlosId(-1),
-fChannel(0),
-fJitter(0),
-fDDL(0)
+  fDDLModuleMap(0),
+  fData(0),
+  fCarlosId(-1),
+  fChannel(0),
+  fJitter(0),
+  fDDL(0),
+  fADCEncoded(0)
 {
 // create an object to read ITS SDD raw digits
   for(Int_t im=0;im<kSDDModules;im++){
@@ -93,13 +94,14 @@ fDDL(0)
 
 //______________________________________________________________________
 AliITSRawStreamSDDCompressed::AliITSRawStreamSDDCompressed(const AliITSRawStreamSDDCompressed& rs) :
-AliITSRawStream(rs.fRawReader),
-fDDLModuleMap(rs.fDDLModuleMap),
-fData(0),
-fCarlosId(-1),
-fChannel(0),
-fJitter(0),
-fDDL(0)
+  AliITSRawStream(rs.fRawReader),
+  fDDLModuleMap(rs.fDDLModuleMap),
+  fData(0),
+  fCarlosId(-1),
+  fChannel(0),
+  fJitter(0),
+  fDDL(0),
+  fADCEncoded(0)
 {
   // copy constructor
   AliError("Copy constructor should not be used.");
@@ -154,6 +156,7 @@ Bool_t AliITSRawStreamSDDCompressed::Next()
   UInt_t maskAnode=255<<18; // 8 bits  (18-25) for Nanode   in data word
   UInt_t maskTb=255<<10;    // 8 bits  (10-27) for Ntimebin in data word
   UInt_t maskADC=1023;      // 10 bits (0-9)   for ADC      in data word
+  UInt_t maskCode=7;        // 3 bits (0-2)    for ADC range in encoded-ADC case
     
   while(kTRUE){
     if (!fRawReader->ReadNextInt(fData)) return kFALSE;  // read next word
@@ -177,7 +180,15 @@ Bool_t AliITSRawStreamSDDCompressed::Next()
       fChannel=(fData&maskSide)>>26;
       fCoord1=(fData&maskAnode)>>18;
       fCoord2=(fData&maskTb)>>10;
-      Int_t sig8bit=fData&maskADC;
+      Int_t sig8bit;
+      if(fADCEncoded){
+       UInt_t code=fData&maskCode;
+       if (code < 2 || code > 7) AliError("Wrong ADC code value");
+       UInt_t adcmask=(1<<code)-1;
+       sig8bit=((fData&(adcmask<<3))>>3) + (1<<code);
+      }else{      
+       sig8bit=fData&maskADC;
+      }
       sig8bit+=fLowThresholdArray[fModuleID-kSPDModules][fChannel];
       fSignal=DecompAmbra(sig8bit);
       fCompletedModule=kFALSE;
index e0ce805..a0fb9d3 100644 (file)
@@ -34,6 +34,9 @@ class AliITSRawStreamSDDCompressed: public AliITSRawStream {
     virtual Int_t    GetCarlosId() const {return fCarlosId;}
     virtual UInt_t   GetDataWord() const {return fData;}
 
+    virtual void SetADCEncoded(Bool_t fl=kTRUE){
+      fADCEncoded=fl;
+    }
     virtual void SetDDLModuleMap(AliITSDDLModuleMapSDD* ddlsdd){
       if(!fDDLModuleMap) fDDLModuleMap=new AliITSDDLModuleMapSDD();
       fDDLModuleMap->SetDDLMap(ddlsdd);
@@ -65,9 +68,12 @@ class AliITSRawStreamSDDCompressed: public AliITSRawStream {
     Int_t            fJitter;          // jitter between L0 and pascal stop (x25ns)
     Int_t            fLowThresholdArray[kSDDModules][2]; // array with low thresholds for all modules
 
-    Int_t            fDDL;        //current ddl number
+    Int_t            fDDL;        // current ddl number
+    Bool_t           fADCEncoded;  // flag for data format
+                                  // kTRUE -> ADC encoded in 5+3 bits
+                                  // kFALSE -> ADC decoded (8 bits)
 
-    ClassDef(AliITSRawStreamSDDCompressed, 1) // class for reading ITS SDD raw digits
+    ClassDef(AliITSRawStreamSDDCompressed, 2) // class for reading ITS SDD raw digits
 };
 
 #endif