// @(#) $Id$ // Author: C. Loizides //*-- Copyright © ALICE HLT Group #include "AliL3StandardIncludes.h" #include "AliL3RootTypes.h" #include "AliL3Logging.h" #include "AliL3Transform.h" #include "AliL3MemHandler.h" #include "AliL3DigitData.h" #ifdef use_newio #include "../RAW/AliRawReaderRoot.h" #include "../RAW/AliRawReaderDate.h" #else #include "AliL3DDLTPCRawStream.h" #include "AliL3DDLRawReaderFile.h" #endif #include "AliL3DDLDataFileHandler.h" #if __GNUC__ == 3 using namespace std; #endif /** \class AliL3DDLDataFileHandler
//_____________________________________________________________
// AliL3DDLDataFileHandler
//
//  This class does converts from the DDL format of offline
//  into the memory I/O handling of the HLT binary files.
//  
//  Examples: see ddl2binary in exa and the general 
//            AliL3MemHandler class description
//
*/ ClassImp(AliL3DDLDataFileHandler) AliL3DDLDataFileHandler::AliL3DDLDataFileHandler() { // default constructor fReader=0; fTPCStream=0; } AliL3DDLDataFileHandler::~AliL3DDLDataFileHandler() { // destructor FreeAll(); } void AliL3DDLDataFileHandler::FreeAll() { // frees all heap memory if(fReader) delete fReader; if(fTPCStream) delete fTPCStream; fReader = 0; fTPCStream = 0; } #ifdef use_newio Bool_t AliL3DDLDataFileHandler::SetReaderInput(Char_t *name,Int_t event) { // sets the input of the reader fEvent=event; if(fReader) delete fReader; if(fTPCStream) delete fTPCStream; if(event>=0){ fFilename=name; fReader=new AliRawReaderRoot(name,event); } else { fFilename=""; fReader=new AliRawReaderDate(name); } fTPCStream=new AliTPCRawStream(fReader); return kTRUE; } #else Bool_t AliL3DDLDataFileHandler::SetReaderInput(Char_t *name, Bool_t add) { // sets the input of the reader if(fReader){ LOG(AliL3Log::kError,"AliL3DDLDataFileHandler::SetReaderInput","File Open") <<"Reader ptr is already in use"<=0)&&(event!=fEvent)){ fEvent=event; if(fReader) delete fReader; if(fTPCStream) delete fTPCStream; fReader=new AliRawReaderRoot(fFilename,event); fTPCStream=new AliTPCRawStream(fReader); } #endif AliL3DigitRowData *data = 0; nrow=0; if(!fReader){ LOG(AliL3Log::kWarning,"AliL3DDLDataFileHandler::DDLData2Memory","File") <<"No Input avalible: no object AliL3DDLRawReaderFile"<Reset(); fReader->Select(0,ddls[i],ddls[i]+1); #else fTPCStream->SetDDLID(ddls[i]); //ddl to read out #endif while (fTPCStream->Next()){ UShort_t dig=fTPCStream->GetSignal(); if(dig <= AliL3Transform::GetZeroSup()) continue; if(dig >= AliL3Transform::GetADCSat()) dig = AliL3Transform::GetADCSat(); Int_t time=fTPCStream->GetTime(); Int_t pad=fTPCStream->GetPad(); Int_t sector=fTPCStream->GetSector(); Int_t row=fTPCStream->GetRow(); Int_t slice,srow; //test row criteria (patch boundaries) AliL3Transform::Sector2Slice(slice,srow,sector,row); if((srowfRowMax))continue; if(slice!=fSlice){ LOG(AliL3Log::kError,"AliL3DDLDataFileHandler::DDLDigits2Memory","Slice") <=nrows){ LOG(AliL3Log::kError,"AliL3DDLDataFileHandler::DDLDigits2Memory","Row") <=AliL3Transform::GetNPads(srow))){ LOG(AliL3Log::kError,"AliL3DDLDataFileHandler::DDLDigits2Memory","Pad") <=AliL3Transform::GetNTimeBins())){ LOG(AliL3Log::kError,"AliL3DDLDataFileHandler::DDLDigits2Memory","Time") <fRow = r; tempPt->fNDigit = ndigits[lrow]; Int_t localcount=0; for(Int_t pad=0;pad= ndigits[lrow]) LOG(AliL3Log::kFatal,"AliL3DDLDataFileHandler::DDLDigits2Binary","Memory") <fDigitData[localcount].fCharge=dig; tempPt->fDigitData[localcount].fPad=pad; tempPt->fDigitData[localcount].fTime=time; #ifdef do_mc tempPt->fDigitData[localcount].fTrackID[0] = 0; tempPt->fDigitData[localcount].fTrackID[1] = 0; tempPt->fDigitData[localcount].fTrackID[2] = 0; #endif localcount++; } } if(localcount != ndigits[lrow]) LOG(AliL3Log::kFatal,"AliL3DDLDataFileHandler::DDLDigits2Binary","Memory") <