]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDRawStream.cxx
fix for the corrupt data
[u/mrichter/AliRoot.git] / TRD / AliTRDRawStream.cxx
index d52b600798be2ba6b4003f15ae2c1f43326ead44..5ea06d4cdb6f917b69966bb6ca29dabd5602c460 100644 (file)
 
 /* $Id$ */
 
-///////////////////////////////////////////////////////////////////////////////
-//                                                                           //
-// This class provides access to TRD digits in raw data.                     //
-//                                                                           //
-// It loops over all TRD digits in the raw data given by the AliRawReader.   //
-// The Next method goes to the next digit. If there are no digits left       //
-// it returns kFALSE.                                                        //
-// Several getters provide information about the current digit.              //
-//                                                                           //
-// Author: C. Lippmann (C.Lippmann@gsi.de)                                   //
-//                                                                           //
-///////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////
+//                                                                        //
+// This class provides access to TRD digits in raw data.                  //
+//                                                                        //
+// It loops over all TRD digits in the raw data given by the AliRawReader //
+// The Next method goes to the next digit. If there are no digits left    //
+// it returns kFALSE.                                                     //
+// Several getters provide information about the current digit.           //
+//                                                                        //
+// Author:                                                                //
+//   Christian Lippmann (C.Lippmann@gsi.de)                               //
+//                                                                        //
+////////////////////////////////////////////////////////////////////////////
 
 #include "AliLog.h"
 #include "AliRawReader.h"
+
 #include "AliTRDRawStream.h"
 #include "AliTRDgeometry.h"
 #include "AliTRDcalibDB.h"
-
 #include "AliTRDdigitsManager.h"
 #include "AliTRDdataArrayI.h"
+#include "AliTRDdataArrayS.h"
 #include "AliTRDSignalIndex.h"
+#include "AliTRDfeeParam.h"
 
 ClassImp(AliTRDRawStream)
 
 //_____________________________________________________________________________
 AliTRDRawStream::AliTRDRawStream() 
-  :TObject()
+  :AliTRDrawStreamBase()
+//  :TObject()
+  ,fGeo(NULL) 
   ,fSig()
   ,fADC(0)
   ,fTB(0)
@@ -103,11 +108,10 @@ AliTRDRawStream::AliTRDRawStream()
   ,fSizeOK(kFALSE)
   ,fCountBytes(0)
   ,fBufSize(0)
-  ,fkBufferSet(kFALSE)
+  ,fBufferSet(kFALSE)
   ,fPos(NULL)
   ,fDataWord(NULL)
   ,fTimeBinsCalib(0)
-  ,fGeo(NULL) 
 {
   //
   // Default constructor
@@ -121,7 +125,9 @@ AliTRDRawStream::AliTRDRawStream()
 
 //_____________________________________________________________________________
 AliTRDRawStream::AliTRDRawStream(AliRawReader *rawReader) 
-  :TObject()
+  :AliTRDrawStreamBase(rawReader)
+//  :TObject()
+  ,fGeo(NULL) 
   ,fSig()
   ,fADC(0)
   ,fTB(0)
@@ -182,11 +188,10 @@ AliTRDRawStream::AliTRDRawStream(AliRawReader *rawReader)
   ,fSizeOK(kFALSE)
   ,fCountBytes(0)
   ,fBufSize(0)
-  ,fkBufferSet(kFALSE)
+  ,fBufferSet(kFALSE)
   ,fPos(NULL)
   ,fDataWord(NULL)
   ,fTimeBinsCalib(0)
-  ,fGeo(NULL) 
 {
   //
   // Create an object to read TRD raw digits
@@ -202,7 +207,9 @@ AliTRDRawStream::AliTRDRawStream(AliRawReader *rawReader)
 
 //_____________________________________________________________________________
 AliTRDRawStream::AliTRDRawStream(const AliTRDRawStream& stream)
-  :TObject(stream)
+  :AliTRDrawStreamBase(stream)
+//  :TObject()
+  ,fGeo(NULL)
   ,fSig()
   ,fADC(-1)
   ,fTB(-1)
@@ -263,11 +270,10 @@ AliTRDRawStream::AliTRDRawStream(const AliTRDRawStream& stream)
   ,fSizeOK(kFALSE)
   ,fCountBytes(0)
   ,fBufSize(0)
-  ,fkBufferSet(kFALSE)
+  ,fBufferSet(kFALSE)
   ,fPos(NULL)
   ,fDataWord(NULL)
   ,fTimeBinsCalib(0)
-  ,fGeo(NULL)
 {
   //
   // Copy constructor
@@ -285,7 +291,7 @@ AliTRDRawStream& AliTRDRawStream::operator = (const AliTRDRawStream&
   // Assigment operator
   //
 
-  Fatal("operator =", "assignment operator not implemented");
+  AliFatal("Assignment operator not implemented");
   return *this;
 
 }
@@ -306,10 +312,15 @@ AliTRDRawStream::~AliTRDRawStream()
 //_____________________________________________________________________________
 void AliTRDRawStream::SetRawReader(AliRawReader *rawReader) 
 {
+  //
+  // Sets the raw reader
+  //
+
   if (rawReader)
     {
       fRawReader = rawReader;
     }
+
 }
 
 //_____________________________________________________________________________
@@ -328,9 +339,8 @@ Bool_t AliTRDRawStream::SetRawVersion(Int_t rv)
 
 }
 
-
 //____________________________________________________________________________
-Int_t AliTRDRawStream::Init()
+Bool_t AliTRDRawStream::Init()
 {
   //
   // Initialization
@@ -338,7 +348,7 @@ Int_t AliTRDRawStream::Init()
 
   if (!AliTRDcalibDB::Instance()) {
     AliError("Could not get calibration object");
-    return 0;
+    return kFALSE;
   }
 
   if (!fGeo) {
@@ -368,15 +378,17 @@ Int_t AliTRDRawStream::Init()
   fDataSize = 0;
   fSizeOK = kFALSE;
   
-  fNextStatus = fkStart;
+  fNextStatus = kStart;
 
   fCountBytes = 0;
   fBufSize = 0;
   fDataWord = NULL;
   fPos = NULL;
   fWordCtr = 0;
-  fkBufferSet = kFALSE;
+  fBufferSet = kFALSE;
+
   return kTRUE;
+
 }
 
 //____________________________________________________________________________
@@ -388,20 +400,20 @@ Int_t AliTRDRawStream::NextData()
 
   if (fCountBytes + kSizeWord >= fBufSize)
     {
-      fkBufferSet = fRawReader->ReadNextData(fPos);
-      if (fkBufferSet == kTRUE)
+      fBufferSet = fRawReader->ReadNextData(fPos);
+      if (fBufferSet == kTRUE)
        {
          fBufSize = fRawReader->GetDataSize();
          fCountBytes = 0;        
          fDataWord = (UInt_t*)fPos;
-         fNextStatus = fkNextSM;
+         fNextStatus = kNextSM;
          fWordCtr = 0;
-         return fkNextSM;
+         return kNextSM;
        }
       else
        {
-         fNextStatus = fkStop;
-         return fkNoMoreData;
+         fNextStatus = kStop;
+         return kNoMoreData;
        }
     }
   else
@@ -411,7 +423,7 @@ Int_t AliTRDRawStream::NextData()
       fCountBytes += kSizeWord;          
       fDataWord = (UInt_t*)fPos;
       fWordCtr++;
-      return fkWordOK;
+      return kWordOK;
     }
 }
 
@@ -422,15 +434,15 @@ Bool_t AliTRDRawStream::Next()
   // Updates the next data word pointer
   //
 
-  if (fNextStatus == fkStart)
+  if (fNextStatus == kStart)
     {
       Init();
     }
 
-  while (fNextStatus != fkStop)
-    { // !fkStop
+  while (fNextStatus != kStop)
+    { // !kStop
       NextData();
-      if (fNextStatus == fkNextMCM || fNextStatus == fkNextData)
+      if (fNextStatus == kNextMCM || fNextStatus == kNextData)
        {
          fHCdataCtr += 4;
          
@@ -441,24 +453,24 @@ Bool_t AliTRDRawStream::Next()
                {
                  AliWarning("Wrong fMCM or fROB. Skip this data");
                  fRawReader->AddMajorErrorLog(kWrongMCMorROB,Form("MCM=%d, ROB=%d",fMCM,fROB));
-                 fNextStatus = fkNextHC;
+                 fNextStatus = kNextHC;
                  continue;
                }
              fTbSwitch    = 3;  // For first adc channel we expect: (*fDataWord & 3) = 3
              fTbSwitchCtr = 0;  // 
              fADC = fTB   = 0;  // Reset Counter
-             fNextStatus = fkNextData;
+             fNextStatus = kNextData;
              continue;
            }
          
          if ( *fDataWord == kEndofrawdatamarker ) 
            {  // End of half-chamber data, finished
              fGTUctr1 = -1;
-             fNextStatus = fkNextHC;
+             fNextStatus = kNextHC;
              continue;
            }
          
-         if (fNextStatus == fkNextData )
+         if (fNextStatus == kNextData )
            {       // MCM header is set, ADC data is valid.
              
              // Found some data. Decode it now:
@@ -466,7 +478,7 @@ Bool_t AliTRDRawStream::Next()
              if ( fRetVal ==  0 ) continue;
              if ( fRetVal == -1 ) 
                {
-                 fNextStatus = fkNextHC;
+                 fNextStatus = kNextHC;
                  continue;
                }
              if ( fRetVal == 1)
@@ -490,12 +502,12 @@ Bool_t AliTRDRawStream::Next()
              //              {
              //                fCOL = -1;             
              //              }
-           }// fkNextData  
+           }// kNextData  
          
          continue;
        } //next mcm
 
-      if ( fNextStatus == fkNextHC )
+      if ( fNextStatus == kNextHC )
        {
          //
          // 1) Find end_of_tracklet_marker
@@ -511,7 +523,7 @@ Bool_t AliTRDRawStream::Next()
          if ( *fDataWord == kEndoftrackletmarker ) 
            {
              AliDebug(3, "end-of-tracklet-marker found");
-             fNextStatus = fkSeekNonEoTracklet;
+             fNextStatus = kSeekNonEoTracklet;
              continue;
            } 
          else 
@@ -523,7 +535,7 @@ Bool_t AliTRDRawStream::Next()
            }
        } //if next HC
 
-      if (fNextStatus == fkSeekNonEoTracklet)
+      if (fNextStatus == kSeekNonEoTracklet)
        {
          //
          // 2) Look for non-end_of_tracklet_marker
@@ -532,7 +544,7 @@ Bool_t AliTRDRawStream::Next()
 
          if ( *fDataWord != kEndoftrackletmarker ) 
            {
-             fNextStatus = fkDecodeHC;
+             fNextStatus = kDecodeHC;
              AliDebug(3, "NON end-of-tracklet-marker found");
              //// no do not continue - this should be the hcheader
            }
@@ -543,7 +555,7 @@ Bool_t AliTRDRawStream::Next()
            }
        }
 
-      if ( fNextStatus == fkDecodeHC )
+      if ( fNextStatus == kDecodeHC )
        {
          AliDebug(3, "Decode HC");
 
@@ -562,19 +574,19 @@ Bool_t AliTRDRawStream::Next()
              fHCdataCtr = 0;
              
              fChamberDone[fDET]++;
-             fNextStatus = fkNextMCM;
+             fNextStatus = kNextMCM;
              AliDebug(3, "Decode HC OK");            
              continue;
            } //HC header
          else
            {
              AliDebug(3, "Decode HC NOT OK");        
-             fNextStatus = fkNextSM;
+             fNextStatus = kNextSM;
              continue;
            }
        } // if decode HC
 
-      if (fNextStatus == fkNextSM)
+      if (fNextStatus == kNextSM)
        {
          
          fDET     = 0;
@@ -595,18 +607,18 @@ Bool_t AliTRDRawStream::Next()
          if ( (*fDataWord & 0xfffff000) ==  0xe0000000 ) 
            {
              DecodeGTUlinkMask();
-             fNextStatus = fkNextHC;
+             fNextStatus = kNextHC;
              continue;
            } 
          else 
            {
              AliWarning(Form("Equipment %d: First data word is not GTU Link Mask!", fEqID));
               fRawReader->AddMajorErrorLog(kGTULinkMaskMissing,Form("Equipment %d",fEqID));
-             fNextStatus = fkStop;
+             fNextStatus = kStop;
            }       
        }// if nextSM
 
-    } // not fkStop
+    } // not kStop
 
   AliDebug(1, Form("That's all folks! %d", fSM));
   return kFALSE;
@@ -619,22 +631,22 @@ Int_t AliTRDRawStream::NextChamber(AliTRDdigitsManager *man)
   // Updates the next data word pointer
   //
 
-  AliTRDdataArrayI *digits = 0;
+  AliTRDdataArrayS *digits = 0;
   AliTRDdataArrayI *track0 = 0;
   AliTRDdataArrayI *track1 = 0;
   AliTRDdataArrayI *track2 = 0; 
   AliTRDSignalIndex *indexes = 0;
          
-  if (fNextStatus == fkStart)
+  if (fNextStatus == kStart)
     {
       Init();
     }
 
-  while (fNextStatus != fkStop)
-    { // !fkStop
+  while (fNextStatus != kStop)
+    { // !kStop
       NextData();
-      if (fNextStatus == fkNextMCM || fNextStatus == fkNextData)
-      //while (fNextStatus == fkNextMCM || fNextStatus == fkNextData)
+      if (fNextStatus == kNextMCM || fNextStatus == kNextData)
+      //while (fNextStatus == kNextMCM || fNextStatus == kNextData)
        {
          fHCdataCtr += 4;
          
@@ -645,13 +657,13 @@ Int_t AliTRDRawStream::NextChamber(AliTRDdigitsManager *man)
                {
                  AliWarning("Wrong fMCM or fROB. Skip this data");
                  fRawReader->AddMajorErrorLog(kWrongMCMorROB,Form("MCM=%d, ROB=%d",fMCM,fROB));
-                 fNextStatus = fkNextHC;
+                 fNextStatus = kNextHC;
                  continue;
                }
              fTbSwitch    = 3;  // For first adc channel we expect: (*fDataWord & 3) = 3
              fTbSwitchCtr = 0;  // 
              fADC = fTB   = 0;  // Reset Counter
-             fNextStatus = fkNextData;
+             fNextStatus  = kNextData;
 
 //           NextData(); // if while loop!
              continue; // if if
@@ -660,7 +672,7 @@ Int_t AliTRDRawStream::NextChamber(AliTRDdigitsManager *man)
          if ( *fDataWord == kEndofrawdatamarker ) 
            {  // End of half-chamber data, finished
              fGTUctr1 = -1;
-             fNextStatus = fkNextHC;
+             fNextStatus = kNextHC;
              // full chamber processed ?
              if (fChamberDone[fDET] == 2)
                {
@@ -673,7 +685,7 @@ Int_t AliTRDRawStream::NextChamber(AliTRDdigitsManager *man)
                }
            }
          
-         if (fNextStatus == fkNextData )
+         if (fNextStatus == kNextData )
            {       // MCM header is set, ADC data is valid.
              
              // Found some data. Decode it now:
@@ -681,7 +693,7 @@ Int_t AliTRDRawStream::NextChamber(AliTRDdigitsManager *man)
              if ( fRetVal ==  0 ) continue;
              if ( fRetVal == -1 ) 
                {
-                 fNextStatus = fkNextHC;
+                 fNextStatus = kNextHC;
 
 //               NextData(); // if while loop!
 //               break; //if while loop!
@@ -728,13 +740,13 @@ Int_t AliTRDRawStream::NextChamber(AliTRDdigitsManager *man)
 //           {
 //             fCOL = -1;             
 //           }
-           }// fkNextData  
+           }// kNextData  
          
 //       NextData(); // if while loop!
          continue; //if if
        } //next mcm
 
-      if ( fNextStatus == fkNextHC )
+      if ( fNextStatus == kNextHC )
        {
          //
          // 1) Find end_of_tracklet_marker
@@ -750,7 +762,7 @@ Int_t AliTRDRawStream::NextChamber(AliTRDdigitsManager *man)
          if ( *fDataWord == kEndoftrackletmarker ) 
            {
              AliDebug(3, "end-of-tracklet-marker found");
-             fNextStatus = fkSeekNonEoTracklet;
+             fNextStatus = kSeekNonEoTracklet;
              continue;
            } 
          else 
@@ -762,7 +774,7 @@ Int_t AliTRDRawStream::NextChamber(AliTRDdigitsManager *man)
            }
        } //if next HC
 
-      if (fNextStatus == fkSeekNonEoTracklet)
+      if (fNextStatus == kSeekNonEoTracklet)
        {
          //
          // 2) Look for non-end_of_tracklet_marker
@@ -771,7 +783,7 @@ Int_t AliTRDRawStream::NextChamber(AliTRDdigitsManager *man)
 
          if ( *fDataWord != kEndoftrackletmarker ) 
            {
-             fNextStatus = fkDecodeHC;
+             fNextStatus = kDecodeHC;
              AliDebug(3, "NON end-of-tracklet-marker found");
              //// no do not continue - this should be the hcheader
            }
@@ -782,7 +794,7 @@ Int_t AliTRDRawStream::NextChamber(AliTRDdigitsManager *man)
            }
        }
 
-      if ( fNextStatus == fkDecodeHC )
+      if ( fNextStatus == kDecodeHC )
        {
          AliDebug(3, "Decode HC");
 
@@ -801,10 +813,10 @@ Int_t AliTRDRawStream::NextChamber(AliTRDdigitsManager *man)
                  AliDebug(4, "New DET!");            
                  // allocate stuff for the new det
                  //man->ResetArrays();
-                 digits = man->GetDigits(fDET);
-                 track0 = man->GetDictionary(fDET,0);
-                 track1 = man->GetDictionary(fDET,1);
-                 track2 = man->GetDictionary(fDET,2);
+                 digits = (AliTRDdataArrayS *) man->GetDigits(fDET);
+                 track0 = (AliTRDdataArrayI *) man->GetDictionary(fDET,0);
+                 track1 = (AliTRDdataArrayI *) man->GetDictionary(fDET,1);
+                 track2 = (AliTRDdataArrayI *) man->GetDictionary(fDET,2);
                  
                  // Allocate memory space for the digits buffer
                  if (digits->GetNtime() == 0) 
@@ -838,19 +850,19 @@ Int_t AliTRDRawStream::NextChamber(AliTRDdigitsManager *man)
              fHCdataCtr = 0;
              
              fChamberDone[fDET]++;
-             fNextStatus = fkNextMCM;
+             fNextStatus = kNextMCM;
              AliDebug(3, "Decode HC OK");            
              continue;
            } //HC header
          else
            {
              AliDebug(3, "Decode HC NOT OK");        
-             fNextStatus = fkNextSM;
+             fNextStatus = kNextSM;
              continue;
            }
        } // if decode HC
 
-      if (fNextStatus == fkNextSM)
+      if (fNextStatus == kNextSM)
        {
          
          fDET     = 0;
@@ -871,18 +883,18 @@ Int_t AliTRDRawStream::NextChamber(AliTRDdigitsManager *man)
          if ( (*fDataWord & 0xfffff000) ==  0xe0000000 ) 
            {
              DecodeGTUlinkMask();
-             fNextStatus = fkNextHC;
+             fNextStatus = kNextHC;
              continue;
            } 
          else 
            {
              AliWarning(Form("Equipment %d: First data word is not GTU Link Mask!", fEqID));
               fRawReader->AddMajorErrorLog(kGTULinkMaskMissing,Form("Equipment %d",fEqID));
-             fNextStatus = fkStop;
+             fNextStatus = kStop;
            }       
        }// if nextSM
 
-    } // not fkStop
+    } // not kStop
 
   AliDebug(1, Form("That's all folks! %d", fSM));
   //return kFALSE;
@@ -962,11 +974,11 @@ void AliTRDRawStream::DecodeHCheader(Int_t timeBins)
   // 2nd word (h[1])
   if ( fHCHWords >= 1 ) {
     // read one more word
-    if (NextData() != fkWordOK)
+    if (NextData() != kWordOK)
       {
        AliWarning("Next HC word missing");
         fRawReader->AddMajorErrorLog(kHCWordMissing,"Next HC word missing"); 
-       fNextStatus = fkNextHC;
+       fNextStatus = kNextHC;
        return;
       }
     if ( (*fDataWord & 0x3) == 1 ) {
@@ -997,11 +1009,11 @@ void AliTRDRawStream::DecodeHCheader(Int_t timeBins)
   // 3nd word (h[2])
   if ( fHCHWords >= 2 ) {
     // read one more word
-    if (NextData() != fkWordOK)
+    if (NextData() != kWordOK)
       {
        AliWarning("Next HC word missing");
         fRawReader->AddMajorErrorLog(kHCWordMissing,"Next HC word missing"); 
-       fNextStatus = fkNextHC;
+       fNextStatus = kNextHC;
        return;
       }
     if ( (*fDataWord & 0x3) == 1 ) {
@@ -1041,7 +1053,7 @@ void AliTRDRawStream::DecodeMCMheader()
   fROB  = fMCM / 16;
   fMCM  = fMCM % 16;
 
-  fROW  = fGeo->GetPadRowFromMCM(fROB, fMCM);
+  fROW  = AliTRDfeeParam::Instance()->GetPadRowFromMCM(fROB, fMCM);
 
   AliDebug(4, Form("0x%08x: SM%d L%dS%d. MCM Header: fROB=%d fMCM=%02d fEv=%02d"
                  , *fDataWord, fSM, fLAYER, fSTACK, fROB, fMCM, fEv));
@@ -1072,11 +1084,11 @@ void AliTRDRawStream::DecodeMCMheader()
   // AdcMask for Zero supressed data
   if ( fRawVersion == 3 ) {
     // read one more word
-    if (NextData() != fkWordOK)
+    if (NextData() != kWordOK)
       {
        AliWarning("MCM ADC mask missing");
         fRawReader->AddMajorErrorLog(kMCMADCMaskMissing,"Missing"); 
-       fNextStatus = fkNextHC;
+       fNextStatus = kNextHC;
        return;
       }
     if ( (*fDataWord & 0x000007ff) == 0xC ) {     // at the moment bits 4-10 are empty
@@ -1231,7 +1243,7 @@ Int_t  AliTRDRawStream::DecodeDataWordV1V2()
   if ( fADC > 1 && fADC < (Int_t)fGeo->ADCmax()-1 ) {
 
     // Get Pad column
-    fCOL = fGeo->GetPadColFromADC(fROB, fMCM, fADC);
+    fCOL = AliTRDfeeParam::Instance()->GetPadColFromADC(fROB, fMCM, fADC);
 
     // We have only 144 Pad Columns
     //if ( fCOL > fColMax-1 || fCOL < 0 ) {
@@ -1322,7 +1334,8 @@ Int_t  AliTRDRawStream::DecodeDataWordV3()
   if ( fADC > 1 && fADC < (Int_t)fGeo->ADCmax()-1 ) {
 
     // Get Pad column
-    fCOL = fGeo->GetPadColFromADC(fROB, fMCM, fADC);
+    //fCOL = fGeo->GetPadColFromADC(fROB, fMCM, fADC);
+    fCOL = AliTRDfeeParam::Instance()->GetPadColFromADC(fROB, fMCM, fADC);
 
     // We have only 144 Pad Columns
     if ( fCOL > fColMax-1 || fCOL < 0 ) {