// @(#) $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 "AliRawReaderRoot.h" #include "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; fReader = 0; if(fTPCStream) delete fTPCStream; fTPCStream = 0; } #ifdef use_newio Bool_t AliL3DDLDataFileHandler::SetReaderInput(AliRawEvent *rawevent) { // sets the input of the reader fEvent=-1; fFilename=""; if(fReader) delete fReader; fReader=new AliRawReaderRoot(rawevent); if(fTPCStream) delete fTPCStream; fTPCStream=new AliTPCRawStream(fReader); return kTRUE; } 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((void *)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"<ddls[ddlsToSearch-1]) { Int_t tempddl = ddls[0]; ddls[0] = ddls[ddlsToSearch-1]; ddls[ddlsToSearch-1] = tempddl; } #ifdef use_newio fReader->Reset(); fReader->Select("TPC",ddls[0],ddls[ddlsToSearch-1]); fTPCStream->Reset(); #else fTPCStream->SetDDLID(ddls[i]); //ddl to read out #endif Int_t zerosup = AliL3Transform::GetZeroSup(); Int_t adcsat = AliL3Transform::GetADCSat(); Int_t slice,srow; Int_t lrow=-1; while (fTPCStream->Next()){ if(fTPCStream->IsNewSector() || fTPCStream->IsNewRow()) { Int_t sector=fTPCStream->GetSector(); Int_t row=fTPCStream->GetRow(); AliL3Transform::Sector2Slice(slice,srow,sector,row); if(slice!=fSlice){ LOG(AliL3Log::kError,"AliL3DDLDataFileHandler::DDLDigits2Memory","Slice") <fRowMax))continue; Int_t pad=fTPCStream->GetPad(); if(fTPCStream->IsNewPad()) { if((pad<0)||(pad>=AliL3Transform::GetNPads(srow))){ LOG(AliL3Log::kError,"AliL3DDLDataFileHandler::DDLDigits2Memory","Pad") <GetTime(); if((time<0)||(time>=AliL3Transform::GetNTimeBins())){ LOG(AliL3Log::kError,"AliL3DDLDataFileHandler::DDLDigits2Memory","Time") <GetSignal(); if(dig <= zerosup) continue; if(dig >= adcsat) dig = adcsat; ndigits[lrow]++; //for this row only ndigitcount++; //total number of digits to be published charges[lrow][pad][time]=dig; } Int_t size = sizeof(AliL3DigitData)*ndigitcount + nrows*sizeof(AliL3DigitRowData); LOG(AliL3Log::kDebug,"AliL3DDLDataFileHandler::DDLDigits2Memory","Digits") <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") <=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("TPC",ddls[0],ddls[ddlsToSearch-1]); fTPCStream->Reset(); #else fTPCStream->SetDDLID(ddls[i]); //ddl to read out #endif nrow = (UInt_t)nrows; return data; } #endif Bool_t AliL3DDLDataFileHandler::DDLData2CompBinary(Int_t event) { // transfers the DDL data to the memory and converts it // to comp binary Bool_t out = kTRUE; UInt_t ndigits=0; AliL3DigitRowData *digits=0; digits = DDLData2Memory(ndigits,event); out = Memory2CompBinary(ndigits,digits); Free(); return out; }