+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: The ALICE Off-line Project. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+/* $Id: */
+
+//____________________________________________________________________
+//
+// T0
+// Class for reading T0 RAW data in TOF data format
+//
#include "AliT0RawReader.h"
#include "AliT0Parameters.h"
#include "AliBitPacking.h"
ClassImp(AliT0RawReader)
- AliT0RawReader::AliT0RawReader (AliRawReader *rawReader)
+ AliT0RawReader::AliT0RawReader (AliRawReader *rawReader, Bool_t isOnline)
: TTask("T0RawReader","read raw T0 data"),
fRawReader(rawReader),
fData(NULL),
fPosition(0),
fParam(NULL),
- fIsOnline(kFALSE)
+ fIsOnline(isOnline)
{
//
// create an object to read T0raw digits
fRawReader->Reset();
fRawReader->Select("T0");
- // AliT0Parameters* fParam = AliT0Parameters::Instance();
-
- // fIsOnline = isOnline;
- // fIsOnline=kTRUE;
- /* if (fIsOnline)
+ fParam = AliT0Parameters::Instance();
+ if (fIsOnline)
fParam->InitIfOnline();
else
fParam->Init();
- */
+
}
AliT0RawReader::~AliT0RawReader ()
{
Int_t numberOfWordsInTRM=0, iTRM=0;
Int_t tdcTime, koef,hit=0;
Int_t koefhits[110];
- // Int_t fDRM_GLOBAL_HEADER = 0x40000001;
- // Int_t fDRM_GLOBAL_TRAILER = 0x50000001;
-
- // Int_t TRM_GLOBAL_HEADER = 0x40000000;
- Int_t TRM_CHAIN_0_HEADER = 0x00000000;
- // Int_t TRM_CHAIN_1_HEADER = 0x20000000;
- Int_t TRM_CHAIN_0_TRAILER = 0x10000000;
- // Int_t TRM_CHAIN_1_TRAILER = 0x30000000;
- // Int_t TRM_GLOBAL_TRAILER = 0x5000000f;
+ Int_t trm_chain_header = 0x00000000;
+ Int_t trm_chain_trailer = 0x10000000;
- Int_t FILLER = 0x70000000;
+ Int_t filler = 0x70000000;
Bool_t correct=kTRUE;
Int_t header;
-
- AliT0Parameters* fParam = AliT0Parameters::Instance();
- if (fIsOnline)
- fParam->InitIfOnline();
- else
- fParam->Init();
Int_t fNTRM = fParam->GetNumberOfTRMs();
-
for ( Int_t k=0; k<110; k++) {
koefhits[k]=0;
for ( Int_t jj=0; jj<5; jj++) {
if (!fRawReader->ReadNextData(fData)) return kFALSE;
} while (fRawReader->GetDataSize() == 0);
- // fPosition = GetPosition();
fPosition = 0;
- cout.setf( ios_base::hex, ios_base::basefield );
+ cout.setf( ios_base::hex, ios_base::basefield );
//DRM header
for (Int_t i=0; i<6; i++) {
word = GetNextWord();
- // cout<<" DRM header "<<i<<" "<<word<<endl;
+ // cout<<" DRM header "<<word<<endl;
header = AliBitPacking::UnpackWord(word,28,31);
if( header !=4 )
- // uu = word&fDRM_GLOBAL_HEADER;
- // if(uu != fDRM_GLOBAL_HEADER )
{
- AliError(Form(" !!!! wrong DRM header %x!!!!", word));
+ AliWarning(Form(" !!!! wrong DRM header %x!!!!", word));
+ fRawReader->AddFatalErrorLog(kWrongDRMHeader,Form("w=%x",word));
break;
}
}
-
+ // cout<<" fNTRM "<<fNTRM<<endl;
for (Int_t ntrm=0; ntrm< fNTRM; ntrm++)
{
//TRMheader
word = GetNextWord();
- // cout<<" TRM header "<<word<<" "<<AliBitPacking::UnpackWord(word,28,31)<<endl;
- header = AliBitPacking::UnpackWord(word,28,31);
-
- // uu = word&TRM_GLOBAL_HEADER;
- // if(uu != TRM_GLOBAL_HEADER &&
- if ( header != 4 )
- {
- AliError(Form(" !!!! wrong TRM header %x!!!!", word));
- break;
- }
+ header = AliBitPacking::UnpackWord(word,28,31);
+ // cout<<" TRM header "<<word<<endl;
+ if ( header != 4 )
+ {
+ AliWarning(Form(" !!!! wrong TRM header %x!!!!", word));
+ fRawReader->AddMajorErrorLog(kWrongTRMHeader,Form("w=%x",word));
+ break;
+ }
numberOfWordsInTRM=AliBitPacking::UnpackWord(word,4,16);
+ // cout<<" numberOfWordsInTRM "<<numberOfWordsInTRM<<endl;
iTRM=AliBitPacking::UnpackWord(word,0,3);
- // cout<<" iTRM "<<iTRM<<" Nworrds in TRM "<< numberOfWordsInTRM <<endl;
-
for( Int_t ichain=0; ichain<2; ichain++)
{
//chain header
word = GetNextWord();
- uu = word & TRM_CHAIN_0_HEADER;
- if(uu != TRM_CHAIN_0_HEADER)
+ // cout<<" chain header "<<word<<endl;
+ uu = word & trm_chain_header;
+ if(uu != trm_chain_header)
{
- AliError(Form(" !!!! wrong CHAIN 0 header %x!!!!", word));
+ AliWarning(Form(" !!!! wrong CHAIN 0 header %x!!!!", word));
+ fRawReader->AddMajorErrorLog(kWrongChain0Header,Form("w=%x",word));
break;
}
word = GetNextWord();
- // cout<<" ???data?? "<<word<<endl;
+// cout<<" next "<<word<<endl;
tdcTime = AliBitPacking::UnpackWord(word,31,31);
- for (; tdcTime==1; tdcTime)
+ // for (; tdcTime==1; tdcTime)
+ while(tdcTime==1)
{
+ // cout<<" packed "<<word<<endl;
itdc=AliBitPacking::UnpackWord(word,24,27);
ichannel=AliBitPacking::UnpackWord(word,21,23);
time=AliBitPacking::UnpackWord(word,0,20);
koef = fParam->GetChannel(iTRM,itdc,ichain,ichannel);
- // cout<<"koef "<<koef<<" iTRM "<<iTRM<<" itdc "<<itdc<<" iChain "<<ichain<<" ichannel "<<ichannel<<" "<<time<<endl;
+ if (koef != 0 )
+ // cout<<"RawReader>> "<<"koef "<<koef<<" trm "<<iTRM<<
+ // " tdc "<<itdc<<" chain "<<ichain<<
+ // " channel "<<ichannel<<" time "<<time<<endl;
if (koef ==-1 ){
- AliError(Form("Incorrect lookup table ! "));
+ AliWarning(Form("Incorrect lookup table ! "));
+ fRawReader->AddMajorErrorLog(kIncorrectLUT);
correct=kFALSE;
}
if(correct){
hit=koefhits[koef];
- //if(fAllData[koef][hit] == 0)
+ if(hit>5) {
+ AliWarning(Form("Too many hits for %i channel ! ",koef));
+ break;
+ }
fAllData[koef][hit]=time;
koefhits[koef]++;
}
- word = GetNextWord();
- // cout<<" next word "<<word<<endl;
- tdcTime = AliBitPacking::UnpackWord(word,31,31);
+ word = GetNextWord();
+ // cout<<" next word in cycle "<<word<<endl;
+ tdcTime = AliBitPacking::UnpackWord(word,31,31);
- }
+ }
-
- uu = word&TRM_CHAIN_0_TRAILER;
- if(uu != TRM_CHAIN_0_TRAILER )
+ // cout<<" chain trailer "<<word<<endl;
+ uu = word&trm_chain_trailer;
+ if(uu != trm_chain_trailer )
{
- AliError(Form(" !!!! wrong CHAIN 0 trailer %x !!!!", word));
+ AliWarning(Form(" !!!! wrong CHAIN 0 trailer %x !!!!", word));
+ fRawReader->AddMajorErrorLog(kWrongChain0Trailer,Form("w=%x",word));
break;
}
}
word = GetNextWord(); //TRM trailer
- // cout<<" TRM traier "<<word<<endl;
+ // cout<<" TRM trailer "<<word<<endl;
header = AliBitPacking::UnpackWord(word,28,31);
if( header !=5 )
{
- AliError(Form(" !!!! wrong TRM GLOBAL trailer %x!!!!", word));
+ AliWarning(Form(" !!!! wrong TRM GLOBAL trailer %x!!!!", word));
+ fRawReader->AddMajorErrorLog(kWrongTRMTrailer,Form("w=%x",word));
break;
}
} //TRM loop
word = GetNextWord(); //
- header = AliBitPacking::UnpackWord(word,28,31);
- uu = word&FILLER;
- if (word == FILLER ) word = GetNextWord();
- // cout<<" word after FILLER "<<word<<endl;
- if( header !=5 )
- {
- AliError(Form(" !!!! wrong DRM GLOBAL trailer %x!!!!", word));
- // break;
+ // cout<<" after TRM trailer "<<word<<endl;
+ if (word == filler ) word = GetNextWord();
+ header = AliBitPacking::UnpackWord(word,28,31);
+ if( header !=5 )
+ {
+ AliWarning(Form(" !!!! wrong DRM GLOBAL trailer %x!!!!", word));
+ fRawReader->AddFatalErrorLog(kWrongDRMTrailer,Form("w=%x",word));
}
- cout.setf( ios_base::dec, ios_base::basefield );
+ cout.setf( ios_base::dec, ios_base::basefield );
- return kTRUE;
+ return kTRUE;
}
//_____________________________________________________________________________
Int_t AliT0RawReader::GetPosition()