AliRawReaderHLT finished to replace original TPC data by data from the HLT stream...
authorrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 21 Feb 2008 14:02:36 +0000 (14:02 +0000)
committerrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 21 Feb 2008 14:02:36 +0000 (14:02 +0000)
HLT/BASE/AliHLTOUT.cxx
HLT/rec/AliHLTOUTRawReader.cxx
HLT/rec/AliRawReaderHLT.cxx

index af453dc5d324a8e4e6e60949e253b47b98d8c599..2f5093029793f2b3469cf1a1f569642f79ceb9bb 100644 (file)
@@ -163,7 +163,7 @@ int AliHLTOUT::GetDataBuffer(const AliHLTUInt8_t* &pBuffer, AliHLTUInt32_t& size
   pBuffer=NULL;
   size=0;
   if (fCurrent!=fBlockDescList.end()) {
-    if ((iResult=GetDataBuffer((*fCurrent).GetIndex(), pBuffer, size))>=0) {
+    if ((iResult=GetDataBuffer(fCurrent->GetIndex(), pBuffer, size))>=0) {
       fpBuffer=pBuffer;
     }
   }
@@ -230,12 +230,12 @@ int AliHLTOUT::InitHandlers()
     remnants.push_back(GetDataBlockIndex());
     AliHLTComponentDataType dt=kAliHLTVoidDataType;
     AliHLTUInt32_t spec=kAliHLTVoidDataSpec;
-    if ((iResult=GetDataBlockDescription(dt, spec))<0) break;
+    if (GetDataBlockDescription(dt, spec)<0) break;
     for (AliHLTModuleAgent* pAgent=AliHLTModuleAgent::GetFirstAgent(); pAgent && iResult>=0; pAgent=AliHLTModuleAgent::GetNextAgent()) {
       AliHLTModuleAgent::AliHLTOUTHandlerDesc handlerDesc;
       if (pAgent->GetHandlerDescription(dt, spec, handlerDesc)>0) {
        AliHLTOUTHandlerListEntry entry(pAgent->GetOutputHandler(dt, spec), handlerDesc, pAgent, GetDataBlockIndex());
-       iResult=InsertHandler(entry);
+       InsertHandler(entry);
        remnants.pop_back();
        break;
       }
index 5d9c970fb6875e97c111b60d74ef875f11a05811..55ba12c29be2d2c19e5a1bac8859b5ec243de067 100644 (file)
@@ -86,10 +86,12 @@ int AliHLTOUTRawReader::GenerateIndex()
 }
 
 int AliHLTOUTRawReader::GetDataBuffer(AliHLTUInt32_t index, const AliHLTUInt8_t* &pBuffer, 
-                                       AliHLTUInt32_t& size)
+                                     AliHLTUInt32_t& size)
 {
   // see header file for class documentation
   int iResult=0;
+  pBuffer=NULL;
+  size=0;
   if (fpManager) {
     Int_t id = Int_t(index>>fgkIdShift);
     AliHLTUInt32_t blockNo=index&((0x1<<fgkIdShift)-1);
@@ -106,7 +108,12 @@ int AliHLTOUTRawReader::GetDataBuffer(AliHLTUInt32_t index, const AliHLTUInt8_t*
       fpRawreader->SelectEquipment(-1, id, id);
       UChar_t* pSrc=NULL;
       if (fpRawreader->ReadNextData(pSrc) && pSrc!=NULL) {
-       fpCurrent=fpManager->OpenReaderBuffer(pSrc, size);
+       int srcSize=fpRawreader->GetDataSize();
+       int offset=sizeof(AliHLTOUT::AliHLTOUTEventHeader);
+       fpCurrent=fpManager->OpenReaderBuffer(pSrc+offset, srcSize-offset);
+       if (fpCurrent && fpCurrent->ReadNextEvent()!=0) {
+         iResult=-ENODATA;
+       }
       } else {
        iResult=-ENOSYS;
       }
index 60e1222a47ed723b05918846bdd1341d4ccb29b0..4bcf4be9a5b62194ccc00159f480f1110e908b8f 100644 (file)
@@ -192,8 +192,20 @@ Int_t    AliRawReaderHLT::GetEquipmentId() const
 Bool_t   AliRawReaderHLT::ReadHeader()
 {
   // see header file for class documentation
-  Bool_t result=fpParentReader->ReadHeader();
-  fHeader=const_cast<AliRawDataHeader*>(fpParentReader->GetDataHeader());
+  Bool_t result=kFALSE;
+  while (fbHaveHLTData&=ReadNextHLTData()) {
+    // all internal data variables set
+    assert(fpData!=NULL);
+    fHeader=reinterpret_cast<AliRawDataHeader*>(const_cast<AliHLTUInt8_t*>(fpData));
+    if (result=IsSelected()) break;
+  }
+  if (!result) {
+    // first set the selection back to the original one
+    fpParentReader->SelectEquipment(fSelectEquipmentType, fSelectMinEquipmentId, fSelectMaxEquipmentId);
+
+    result=fpParentReader->ReadHeader();
+    fHeader=const_cast<AliRawDataHeader*>(fpParentReader->GetDataHeader());
+  }
   return result;
 }
 
@@ -205,19 +217,15 @@ Bool_t   AliRawReaderHLT::ReadNextData(UChar_t*& data)
   // whole data block either from the HLT stream or the parent raw reader.
   // Each call of ReadNextData directly jumps to the next data set.
   Bool_t result=kFALSE;
-  if (fbHaveHLTData&=ReadNextHLTData()) {
+  if (ReadHeader() && fpData!=NULL) {
     // all internal data variables set
-    assert(fpData!=NULL);
-    data=const_cast<AliHLTUInt8_t*>(fpData);
     result=kTRUE;
+    data=const_cast<AliHLTUInt8_t*>(fpData+sizeof(AliRawDataHeader));
   }
-  if (!result) {
+  if (kFALSE) { // this needs more thinking
     // no data in the HLT stream, read real data
     //AliInfo(Form("read from parent reader: min=%d max=%d", fSelectMinEquipmentId, fSelectMaxEquipmentId));
 
-    // first set the selection back to the original one
-    fpParentReader->SelectEquipment(fSelectEquipmentType, fSelectMinEquipmentId, fSelectMaxEquipmentId);
-
     // read data
     while (result=fpParentReader->ReadNextData(data)) {
       // continue if the Equipment Id is supposed to be replaced by the HLT stream
@@ -448,6 +456,7 @@ Bool_t   AliRawReaderHLT::ReadNextHLTData()
     if (fpDataHandler) fpDataHandler->ReleaseProcessedData(fpData, fDataSize);
     else fpHLTOUT->ReleaseDataBuffer(fpData);
     fpDataHandler=NULL;
+    fpData=NULL;
     if (!(result=fpHLTOUT->SelectNextDataBlock()>=0)) {
       delete fpHLTOUT;
       fpHLTOUT=NULL;
@@ -474,6 +483,7 @@ Bool_t   AliRawReaderHLT::ReadNextHLTData()
          fpDataHandler=pHandler;
          AliDebug(AliLog::kDebug, Form("forward decoded data block provided by handler to equipment %d", fEquipmentId));
        }
+       return kTRUE;
       } else {
        AliError(Form("handler is not of type AliHLTOUTHandlerEquId for block %x data type %s spec %#x; data block skipped",
                      fpHLTOUT->GetDataBlockIndex(), AliHLTComponent::DataType2Text(dt).c_str(), spec));
@@ -488,7 +498,7 @@ Bool_t   AliRawReaderHLT::ReadNextHLTData()
     fOffset=0;
     fEquipmentId=-1;
   }
-  return false;
+  return kFALSE;
 }
 
 Bool_t AliRawReaderHLT::IsHLTInput(int ddlid)