X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=HLT%2FTPCLib%2FAliHLTTPCDigitDumpComponent.cxx;h=c39ddec30ee20aed4a640f1e5d85945bff84fe07;hb=546d00d897e8a17c50bb5017ddd4186837d81141;hp=070627f85f0ba5aae46e4ff282b3f8797aa18107;hpb=61dd7d5234e004398fff0d1a7e4cede71dc8d2ad;p=u%2Fmrichter%2FAliRoot.git diff --git a/HLT/TPCLib/AliHLTTPCDigitDumpComponent.cxx b/HLT/TPCLib/AliHLTTPCDigitDumpComponent.cxx index 070627f85f0..c39ddec30ee 100644 --- a/HLT/TPCLib/AliHLTTPCDigitDumpComponent.cxx +++ b/HLT/TPCLib/AliHLTTPCDigitDumpComponent.cxx @@ -32,20 +32,21 @@ #include "AliHLTTPCTransform.h" #include "AliHLTTPCDigitReader.h" #include "AliHLTTPCDigitReaderUnpacked.h" -#include "AliHLTTPCDigitReaderPacked.h" -#include "AliHLTTPCDigitReaderRaw.h" +#include "AliHLTTPCDigitReader32Bit.h" #include "AliHLTTPCDefinitions.h" -#define DefaultRawreaderMode 0 - /** ROOT macro for the implementation of ROOT specific class methods */ ClassImp(AliHLTTPCDigitDumpComponent) AliHLTTPCDigitDumpComponent::AliHLTTPCDigitDumpComponent() : AliHLTFileWriter(), - fRawreaderMode(DefaultRawreaderMode), - fDigitReaderType(kDigitReaderRaw) + fDigitReaderType(kDigitReader32Bit), + fRcuTrailerSize(2), + fUnsorted(true), + fbBulkMode(true), + fpReader(NULL), + f32BitFormat(kFALSE) { // see header file for class documentation // or @@ -81,7 +82,25 @@ AliHLTComponent* AliHLTTPCDigitDumpComponent::Spawn() int AliHLTTPCDigitDumpComponent::InitWriter() { // see header file for class documentation - return 0; + int iResult=0; + switch (fDigitReaderType) { + case kDigitReaderUnpacked: + HLTInfo("create DigitReaderUnpacked"); + fpReader=new AliHLTTPCDigitReaderUnpacked; + break; + case kDigitReader32Bit: + HLTInfo("create DigitReader32Bit"); + fpReader=new AliHLTTPCDigitReader32Bit(); + f32BitFormat = kTRUE; + break; + } + if (!fpReader) { + HLTError("can not create digit reader of type %d", fDigitReaderType); + iResult=-EFAULT; + } else { + fpReader->SetUnsorted(fUnsorted); + } + return iResult; } int AliHLTTPCDigitDumpComponent::ScanArgument(int argc, const char** argv) @@ -97,13 +116,7 @@ int AliHLTTPCDigitDumpComponent::ScanArgument(int argc, const char** argv) // -rawreadermode if (argument.CompareTo("-rawreadermode")==0) { if ((bMissingParam=(++i>=argc))) break; - int mode=AliHLTTPCDigitReaderRaw::DecodeMode(argv[i]); - if (mode<0) { - HLTError("invalid rawreadermode specifier '%s'", argv[i]); - iResult=-EINVAL; - } else { - fRawreaderMode=static_cast(mode); - } + HLTWarning("argument '-rawreadermode' deprecated"); break; } @@ -114,21 +127,59 @@ int AliHLTTPCDigitDumpComponent::ScanArgument(int argc, const char** argv) if (param.CompareTo("unpacked", TString::kIgnoreCase)==0) { fDigitReaderType=kDigitReaderUnpacked; } else if (param.CompareTo("packed", TString::kIgnoreCase)==0) { - fDigitReaderType=kDigitReaderPacked; + HLTWarning("argument 'packed' is deprecated, falling back to DigitReader32Bit"); + fDigitReaderType=kDigitReader32Bit; } else if (param.CompareTo("raw", TString::kIgnoreCase)==0) { - fDigitReaderType=kDigitReaderRaw; + HLTWarning("argument 'raw' is deprecated, falling back to DigitReader32Bit"); + fDigitReaderType=kDigitReader32Bit; + } else if (param.CompareTo("decoder", TString::kIgnoreCase)==0) { + HLTWarning("argument 'decoder' is deprecated, falling back to DigitReader32Bit"); + fDigitReaderType=kDigitReader32Bit; + } else if (param.CompareTo("32bit", TString::kIgnoreCase)==0) { + fDigitReaderType=kDigitReader32Bit; } else { HLTError("unknown digit reader type %s", param.Data()); iResult=-EINVAL; } - if (fDigitReaderType!=kDigitReaderRaw && fRawreaderMode!=DefaultRawreaderMode && iResult>=0) { - HLTWarning("the selected digit reader does not support the option \'-rawreadermode\'"); + break; + } + + // -rcutrailersize + if (argument.CompareTo("-rcutrailersize")==0) { + if ((bMissingParam=(++i>=argc))) break; + char *endptr=NULL; + fRcuTrailerSize=strtoul(argv[i], &endptr, 0); + if (/*endptr ||*/ fRcuTrailerSize<1) { + HLTError("invalid parameter '%s', %s", argv[i], endptr==NULL?"number >= 1 expected":"can not convert string to number"); + iResult=-EINVAL; } + break; + } + + // -unsorted + if (argument.CompareTo("-unsorted")==0) { + fUnsorted=true; + break; + } + + // -sorted + if (argument.CompareTo("-sorted")==0) { + fUnsorted=false; + break; + } + // -bulk + if (argument.CompareTo("-bulk")==0) { + fbBulkMode=true; break; } + // -stream + if (argument.CompareTo("-stream")==0) { + fbBulkMode=false; + break; + } } while (0); // just use the do/while here to have the option of breaking if (bMissingParam) iResult=-EPROTO; @@ -140,11 +191,13 @@ int AliHLTTPCDigitDumpComponent::ScanArgument(int argc, const char** argv) int AliHLTTPCDigitDumpComponent::CloseWriter() { // see header file for class documentation + if (fpReader) delete fpReader; + fpReader=NULL; return 0; } int AliHLTTPCDigitDumpComponent::DumpEvent( const AliHLTComponentEventData& evtData, - const AliHLTComponentBlockData* blocks, + const AliHLTComponentBlockData* /*blocks*/, AliHLTComponentTriggerData& /*trigData*/ ) { // see header file for class documentation @@ -154,6 +207,9 @@ int AliHLTTPCDigitDumpComponent::DumpEvent( const AliHLTComponentEventData& evtD int blockno=0; const AliHLTComponentBlockData* pDesc=NULL; + AliHLTTPCDigitReader* pReader=fpReader; + if (!pReader) return -ENODEV; + for (pDesc=GetFirstInputBlock(kAliHLTAnyDataType); pDesc!=NULL; pDesc=GetNextInputBlock(), blockno++) { HLTDebug("event %Lu block %d: %s 0x%08x size %d", evtData.fEventID, blockno, DataType2Text(pDesc->fDataType).c_str(), pDesc->fSpecification, pDesc->fSize); @@ -179,75 +235,103 @@ int AliHLTTPCDigitDumpComponent::DumpEvent( const AliHLTComponentEventData& evtD assert(slice==AliHLTTPCDefinitions::GetMaxSliceNr(*pDesc)); int firstRow=AliHLTTPCTransform::GetFirstRow(part); int lastRow=AliHLTTPCTransform::GetLastRow(part); - AliHLTTPCDigitReader* pReader=NULL; - switch (fDigitReaderType) { - case kDigitReaderUnpacked: - HLTInfo("create DigitReaderUnpacked"); - pReader=new AliHLTTPCDigitReaderUnpacked; - break; - case kDigitReaderPacked: - HLTInfo("create DigitReaderPacked"); -#if defined(HAVE_ALIRAWDATA) && defined(HAVE_ALITPCRAWSTREAM_H) - pReader=new AliHLTTPCDigitReaderPacked; -#else // ! defined(HAVE_ALIRAWDATA) && defined(HAVE_ALITPCRAWSTREAM_H) - HLTFatal("DigitReaderPacked not available - check your build"); -#endif // defined(HAVE_ALIRAWDATA) && defined(HAVE_ALITPCRAWSTREAM_H) - break; - case kDigitReaderRaw: - HLTInfo("create DigitReaderRaw"); - pReader=new AliHLTTPCDigitReaderRaw(fRawreaderMode); - break; - } - if (!pReader) { - HLTError("can not create digit reader of type %d", fDigitReaderType); - iResult=-EFAULT; - break; - } - pReader->SetUnsorted(kTRUE); + iResult=pReader->InitBlock(pDesc->fPtr,pDesc->fSize,firstRow,lastRow,part,slice); int iPrintedRow=-1; int iPrintedPad=-1; int iLastTime=-1; - while (pReader->Next()) { - if ((iPrintedSlice!=-1 && iLastTime!=pReader->GetTime()+1 && iLastTime!=pReader->GetTime()-1) || - (iPrintedPad!=-1 && iPrintedPad!=pReader->GetPad()) || - (iPrintedRow!=-1 && iPrintedRow!=pReader->GetRow())) { - dump << endl; - } - if (iPrintedSlice!=slice || iPrintedPart!=part) { - iPrintedSlice=slice; - iPrintedPart=part; - dump << "====================================================================" << endl; - dump << " Slice: " << iPrintedSlice << " Partition: " << iPrintedPart << endl; - iPrintedRow=-1; + if (fbBulkMode) { + while (pReader->NextChannel()) { + if (PrintHeaders(slice, iPrintedSlice, part, iPrintedPart, pReader, iPrintedRow, iPrintedPad, dump)) { + iLastTime=-1; + } + while (pReader->NextBunch()) { + int bunchLength=pReader->GetBunchSize(); + + // Kenneth: 20-04-09. The following if have been added because of inconsistency in the 40 bit decoder and the 32 bit decoder. + // GetSignals() in the 40 bit decoder returns an array of UInt_t while the 32 bit one returns UShort_t + if(f32BitFormat == kTRUE){ + const UShort_t* bunchData=pReader->GetSignalsShort(); + + // bunch data is printed in 'reverse' order in order to produce + // the same output as in stream reading mode + dump << " Time " << pReader->GetTime()+bunchLength-1 << ": "; + for (int bin=bunchLength-1; bin>=0; bin--) { + dump << " " << bunchData[bin]; + } + dump << " -> Time: " << pReader->GetTime() << endl; + } + else{ + const UInt_t* bunchData=pReader->GetSignals(); + dump << " Time " << pReader->GetTime()+bunchLength-1 << ": "; + for (int bin=0; bin Time: " << pReader->GetTime() << endl; + } + } } - if (iPrintedRow!=pReader->GetRow()) { - iPrintedRow=pReader->GetRow(); - dump << "--------------------------------------------------------------------" << endl; - dump << "Row: " << iPrintedRow << endl; - iPrintedPad=-1; + dump << endl; + } else { + while (pReader->Next()) { + if ((iPrintedSlice!=-1 && iLastTime!=-1 && iLastTime!=pReader->GetTime()+1 && iLastTime!=pReader->GetTime()-1)) { + dump << " -> Time: " << iLastTime << endl; + } else if ((iPrintedPad!=-1 && iPrintedPad!=pReader->GetPad()) || + (iPrintedRow!=-1 && iPrintedRow!=pReader->GetRow())) { + dump << " -> Time: " << iLastTime << endl; + //dump << endl; } - if (iPrintedPad!=pReader->GetPad()) { - iPrintedPad=pReader->GetPad(); - dump << "Row: " << iPrintedRow << " Pad: " << iPrintedPad << endl; + + if (PrintHeaders(slice, iPrintedSlice, part, iPrintedPart, pReader, iPrintedRow, iPrintedPad, dump)) { iLastTime=-1; } - if (iLastTime!=pReader->GetTime()+1 && iLastTime!=pReader->GetTime()-1 ) { + if (iLastTime==-1 || (iLastTime!=pReader->GetTime()+1 && iLastTime!=pReader->GetTime()-1)) { dump << " Time " << pReader->GetTime() << ": "; } iLastTime=pReader->GetTime(); dump << " " << pReader->GetSignal(); } - dump << endl << endl; - delete pReader; - pReader=NULL; + if (iLastTime>=0) dump << " -> Time: " << iLastTime << endl << endl; + } } else { HLTError("can not open file %s for writing", filename.Data()); iResult=-EBADF; } dump.close(); } + pReader->Reset(); } return iResult; } + +int AliHLTTPCDigitDumpComponent::PrintHeaders(int slice, int &iPrintedSlice, + int part, int &iPrintedPart, + AliHLTTPCDigitReader* pReader, + int &iPrintedRow, int &iPrintedPad, + ofstream &dump) const +{ + // see header file for class documentation + int iResult=0; + assert(pReader); + if (iPrintedSlice!=slice || iPrintedPart!=part) { + iPrintedSlice=slice; + iPrintedPart=part; + dump << "====================================================================" << endl; + dump << " Slice: " << iPrintedSlice << " Partition: " << iPrintedPart << endl; + iPrintedRow=-1; + } + if (iPrintedRow!=pReader->GetRow()) { + iPrintedRow=pReader->GetRow(); + dump << "--------------------------------------------------------------------" << endl; + dump << "Row: " << iPrintedRow << endl; + iPrintedPad=-1; + } + if (iPrintedPad!=pReader->GetPad()) { + iPrintedPad=pReader->GetPad(); + dump << "Row: " << iPrintedRow << " Pad: " << iPrintedPad << " HW address: " << pReader->GetAltroBlockHWaddr() << endl; + iResult=1; + } + + return iResult; +}