X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=T0%2FAliT0RawReader.cxx;h=78d32f1c0288526f0059455b73e5b06dcae47a7d;hb=53918c82f01363eb4ea57b702b513777b9234cad;hp=98c805058476158e662c2480c752e544301e30ea;hpb=76f3b07a2ea5d13a255070777411706558918630;p=u%2Fmrichter%2FAliRoot.git diff --git a/T0/AliT0RawReader.cxx b/T0/AliT0RawReader.cxx index 98c80505847..78d32f1c028 100644 --- a/T0/AliT0RawReader.cxx +++ b/T0/AliT0RawReader.cxx @@ -1,3 +1,25 @@ +/************************************************************************** + * 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" @@ -11,11 +33,16 @@ 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) + fPosition(0), + fParam(NULL), + fIsOnline(isOnline), + fBunchID(0), + fPrintout(kFALSE) + { // // create an object to read T0raw digits @@ -23,6 +50,11 @@ ClassImp(AliT0RawReader) fRawReader->Reset(); fRawReader->Select("T0"); + fParam = AliT0Parameters::Instance(); + if (fIsOnline) + fParam->InitIfOnline(); + else + fParam->Init(); } AliT0RawReader::~AliT0RawReader () @@ -68,137 +100,159 @@ Bool_t AliT0RawReader::Next() // allData[48] mean (T0) signal // allData[49] time difference (vertex) - UInt_t word; Int_t time=0, itdc=0, ichannel=0, uu; 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_chain_header = 0x00000000; + Int_t trm_chain_trailer = 0x10000000; - 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; - - AliT0Parameters* param = AliT0Parameters::Instance(); + UInt_t filler = 0x70000000; + Bool_t correct=kTRUE; + Int_t header; - Int_t fNTRM = param->GetNumberOfTRMs(); - - for ( Int_t k=0; k<110; k++) { - koefhits[k]=0; - for ( Int_t jj=0; jj<5; jj++) { - fAllData[k][jj]=0; - } + Int_t fNTRM = fParam->GetNumberOfTRMs(); + for ( Int_t k=0; k<110; k++) { + koefhits[k]=0; + for ( Int_t jj=0; jj<5; jj++) { + fAllData[k][jj]=0; + } } - do { + do { 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 ); + if(fPrintout) + cout<<" CDH :: BC ID "<< (fRawReader->GetBCID())<< + " Event size"<GetDataSize()<< + " orbit ID "<GetOrbitID()<< + " event index "<GetEventIndex()<< + " event type " <GetType()<AddFatalErrorLog(kWrongDRMHeader,Form("w=%x",word)); break; } - numberOfWordsInTRM=AliBitPacking::UnpackWord(word,4,16); - iTRM=AliBitPacking::UnpackWord(word,0,3); - - //chain header - word = GetNextWord(); - uu = word & TRM_CHAIN_0_HEADER; - if(uu != TRM_CHAIN_0_HEADER) - { - AliError(Form(" !!!! wrong CHAIN 0 header %x!!!!", word)); - break; - } - Int_t ichain=AliBitPacking::UnpackWord(word,0,3); - - for (Int_t i=0; iAddMajorErrorLog(kWrongTRMHeader,Form("w=%x",word)); + break; + } + numberOfWordsInTRM=AliBitPacking::UnpackWord(word,4,16); + if(fPrintout) { + cout<<" TRM header :: event words "<GetChannel(iTRM,itdc,ichain,ichannel); - if (koef ==-1 ){ - AliError(Form("Incorrect lookup table ! ")); - break; - } - hit=koefhits[koef]; - if(fAllData[koef][hit] == 0) fAllData[koef][hit]=time; - koefhits[koef]++; - // cout<AddMajorErrorLog(kWrongChain0Header,Form("w=%x",word)); + break; + } + fBunchID=AliBitPacking::UnpackWord(word,4,15); + if(fPrintout) + cout<<" chain "<< ichain<<" header:: BunchID "<GetChannel(iTRM,itdc,ichain,ichannel); + if (koef != 0 ) + // cout<<"RawReader>> "<<"koef "<AddMajorErrorLog(kIncorrectLUT); + correct=kFALSE; + } + if(correct){ + hit=koefhits[koef]; + if(hit>4) { + AliDebug(10,Form("Too many hits for %i channel - %i ! ",koef,koefhits[koef] )); + hit=4; + } + fAllData[koef][hit]=time; + koefhits[koef]++; + } + word = GetNextWord(); + + tdcTime = AliBitPacking::UnpackWord(word,31,31); + + } + // cout<<" trailer :: "<AddMajorErrorLog(kWrongChain0Trailer,Form("w=%x",word)); + break; + } + if(fPrintout) + cout<<" trailer:: event counter "<< AliBitPacking::UnpackWord(word,16,27)<AddMajorErrorLog(kWrongTRMTrailer,Form("w=%x",word)); + break; + } + if(fPrintout) + cout<<" TRM trailer :: event counter "<< AliBitPacking::UnpackWord(word,16,27)<AddFatalErrorLog(kWrongDRMTrailer,Form("w=%x",word)); } - word = GetNextWord(); //chain 0 trailer - uu = word&TRM_CHAIN_0_TRAILER; - if(uu != TRM_CHAIN_0_TRAILER ) - { - AliError(Form(" !!!! wrong CHAIN 0 trailer %x !!!!", word)); - break; - } - - - word = GetNextWord(); //chain 1 header - uu = word & TRM_CHAIN_1_HEADER; - if(uu != TRM_CHAIN_1_HEADER) - { - AliError(Form(" !!!! wrong CHAIN 1 header %x !!!!", word)); - break; - } - word = GetNextWord(); //chain trailer - uu = word&TRM_CHAIN_1_TRAILER; - if(uu != TRM_CHAIN_1_TRAILER ) - { - AliError(Form(" !!!! wrong CHAIN 1 trailer %x!!!!", word)); - break; - } - - word = GetNextWord(); //TRM trailer - uu = word& TRM_GLOBAL_TRAILER; - if(uu != TRM_GLOBAL_TRAILER ) - { - AliError(Form(" !!!! wrong TRM GLOBAL trailer %x!!!!", word)); - break; - } - } //TRM loop - word = GetNextWord(); // - uu = word& fDRM_GLOBAL_TRAILER; - if(uu != fDRM_GLOBAL_TRAILER ) - { - AliError(Form(" !!!! wrong DRM GLOBAL trailer %x!!!!", word)); - // break; - } - - return kTRUE; + if(fPrintout) + cout<<" DRM trailer ::event counter "<< AliBitPacking::UnpackWord(word,4,15)<