/* $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)
,fSizeOK(kFALSE)
,fCountBytes(0)
,fBufSize(0)
- ,fkBufferSet(kFALSE)
+ ,fBufferSet(kFALSE)
,fPos(NULL)
,fDataWord(NULL)
,fTimeBinsCalib(0)
- ,fGeo(NULL)
{
//
// Default constructor
//_____________________________________________________________________________
AliTRDRawStream::AliTRDRawStream(AliRawReader *rawReader)
- :TObject()
+ :AliTRDrawStreamBase(rawReader)
+// :TObject()
+ ,fGeo(NULL)
,fSig()
,fADC(0)
,fTB(0)
,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
//_____________________________________________________________________________
AliTRDRawStream::AliTRDRawStream(const AliTRDRawStream& stream)
- :TObject(stream)
+ :AliTRDrawStreamBase(stream)
+// :TObject()
+ ,fGeo(NULL)
,fSig()
,fADC(-1)
,fTB(-1)
,fSizeOK(kFALSE)
,fCountBytes(0)
,fBufSize(0)
- ,fkBufferSet(kFALSE)
+ ,fBufferSet(kFALSE)
,fPos(NULL)
,fDataWord(NULL)
,fTimeBinsCalib(0)
- ,fGeo(NULL)
{
//
// Copy constructor
// Assigment operator
//
- Fatal("operator =", "assignment operator not implemented");
+ AliFatal("Assignment operator not implemented");
return *this;
}
//_____________________________________________________________________________
void AliTRDRawStream::SetRawReader(AliRawReader *rawReader)
{
+ //
+ // Sets the raw reader
+ //
+
if (rawReader)
{
fRawReader = rawReader;
}
+
}
//_____________________________________________________________________________
}
-
//____________________________________________________________________________
-Int_t AliTRDRawStream::Init()
+Bool_t AliTRDRawStream::Init()
{
//
// Initialization
if (!AliTRDcalibDB::Instance()) {
AliError("Could not get calibration object");
- return 0;
+ return kFALSE;
}
if (!fGeo) {
fDataSize = 0;
fSizeOK = kFALSE;
- fNextStatus = fkStart;
+ fNextStatus = kStart;
fCountBytes = 0;
fBufSize = 0;
fDataWord = NULL;
fPos = NULL;
fWordCtr = 0;
- fkBufferSet = kFALSE;
+ fBufferSet = kFALSE;
+
return kTRUE;
+
}
//____________________________________________________________________________
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
fCountBytes += kSizeWord;
fDataWord = (UInt_t*)fPos;
fWordCtr++;
- return fkWordOK;
+ return kWordOK;
}
}
// 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;
{
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:
if ( fRetVal == 0 ) continue;
if ( fRetVal == -1 )
{
- fNextStatus = fkNextHC;
+ fNextStatus = kNextHC;
continue;
}
if ( fRetVal == 1)
// {
// fCOL = -1;
// }
- }// fkNextData
+ }// kNextData
continue;
} //next mcm
- if ( fNextStatus == fkNextHC )
+ if ( fNextStatus == kNextHC )
{
//
// 1) Find end_of_tracklet_marker
if ( *fDataWord == kEndoftrackletmarker )
{
AliDebug(3, "end-of-tracklet-marker found");
- fNextStatus = fkSeekNonEoTracklet;
+ fNextStatus = kSeekNonEoTracklet;
continue;
}
else
}
} //if next HC
- if (fNextStatus == fkSeekNonEoTracklet)
+ if (fNextStatus == kSeekNonEoTracklet)
{
//
// 2) Look for non-end_of_tracklet_marker
if ( *fDataWord != kEndoftrackletmarker )
{
- fNextStatus = fkDecodeHC;
+ fNextStatus = kDecodeHC;
AliDebug(3, "NON end-of-tracklet-marker found");
//// no do not continue - this should be the hcheader
}
}
}
- if ( fNextStatus == fkDecodeHC )
+ if ( fNextStatus == kDecodeHC )
{
AliDebug(3, "Decode HC");
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;
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;
// 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;
{
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
if ( *fDataWord == kEndofrawdatamarker )
{ // End of half-chamber data, finished
fGTUctr1 = -1;
- fNextStatus = fkNextHC;
+ fNextStatus = kNextHC;
// full chamber processed ?
if (fChamberDone[fDET] == 2)
{
}
}
- if (fNextStatus == fkNextData )
+ if (fNextStatus == kNextData )
{ // MCM header is set, ADC data is valid.
// Found some data. Decode it now:
if ( fRetVal == 0 ) continue;
if ( fRetVal == -1 )
{
- fNextStatus = fkNextHC;
+ fNextStatus = kNextHC;
// NextData(); // if while loop!
// break; //if while loop!
// {
// 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
if ( *fDataWord == kEndoftrackletmarker )
{
AliDebug(3, "end-of-tracklet-marker found");
- fNextStatus = fkSeekNonEoTracklet;
+ fNextStatus = kSeekNonEoTracklet;
continue;
}
else
}
} //if next HC
- if (fNextStatus == fkSeekNonEoTracklet)
+ if (fNextStatus == kSeekNonEoTracklet)
{
//
// 2) Look for non-end_of_tracklet_marker
if ( *fDataWord != kEndoftrackletmarker )
{
- fNextStatus = fkDecodeHC;
+ fNextStatus = kDecodeHC;
AliDebug(3, "NON end-of-tracklet-marker found");
//// no do not continue - this should be the hcheader
}
}
}
- if ( fNextStatus == fkDecodeHC )
+ if ( fNextStatus == kDecodeHC )
{
AliDebug(3, "Decode HC");
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)
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;
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;
// 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 ) {
// 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 ) {
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));
// 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
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 ) {
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 ) {