#include "AliHLTOUTHandlerEsdBranch.h"
#include "AliHLTOUT.h"
#include "AliHLTMessage.h"
#include "AliHLTErrorGuard.h"
#include "AliHLTEsdManager.h"
#include "AliHLTComponent.h"
#include "AliHLTMisc.h"
#include "TString.h"
#include "TObjString.h"
#include "TObjArray.h"
#include "TArrayC.h"
#include <cassert>
ClassImp(AliHLTOUTHandlerEsdBranch)
AliHLTOUTHandlerEsdBranch::AliHLTOUTHandlerEsdBranch(const char* branchname)
: AliHLTOUTHandler()
, fBranch(branchname)
, fESD(NULL)
, fpData(NULL)
, fSize(0)
, fManager(NULL)
{
}
AliHLTOUTHandlerEsdBranch::~AliHLTOUTHandlerEsdBranch()
{
if (fESD) fManager->DestroyEsdEvent(fESD);
fESD=NULL;
if (fpData) delete fpData;
fpData=NULL;
if (fManager) AliHLTEsdManager::Delete(fManager);
fManager=NULL;
}
int AliHLTOUTHandlerEsdBranch::ProcessData(AliHLTOUT* pData)
{
if (!pData) return -EINVAL;
int iResult=0;
if (CheckStatus(kHandlerError)) {
HLTWarning("kEsd handler for ESD branch '%s' in error state, skipping processing of associated HLTOUT blocks", fBranch.Data());
return -EPERM;
}
if (!fManager) {
fManager=AliHLTMisc::LoadInstance((AliHLTEsdManager*)NULL, "AliHLTEsdManagerImplementation", "libHLTrec.so");
}
if (!fManager) {
AliHLTComponentDataType dt=kAliHLTVoidDataType;
AliHLTUInt32_t spec=kAliHLTVoidDataSpec;
if (pData->SelectFirstDataBlock()>=0) {
pData->GetDataBlockDescription(dt, spec);
ALIHLTERRORGUARD(1, "failed to create AliHLTEsdManagerImplementation object, skipping handling of HLTOUT data %s 0x%80x", AliHLTComponent::DataType2Text(dt).c_str(), spec);
}
return -ENOSYS;
}
if (!fESD) {
fESD = fManager->CreateEsdEvent();
}
if (!fpData) fpData=new TArrayC;
if (fESD && fpData) {
fManager->ResetEsdEvent(fESD);
iResult=ExtractAndAddObjects(pData);
}
AliHLTMessage* pMsg=AliHLTMessage::Stream(fESD);
if (pMsg) {
if (!pMsg->CompBuffer()) {
fSize=pMsg->Length();
fpData->Set(fSize, pMsg->Buffer());
} else {
fSize=pMsg->CompLength();
fpData->Set(fSize, pMsg->CompBuffer());
}
delete pMsg;
pMsg=NULL;
} else {
HLTError("streaming of object failed");
}
return iResult;
}
int AliHLTOUTHandlerEsdBranch::ExtractAndAddObjects(AliHLTOUT* pData)
{
if (!fESD || !fManager) return -ENOSYS;
int iResult=0;
iResult=pData->SelectFirstDataBlock();
if (iResult<0) return iResult;
TObject* pObject=pData->GetDataObject();
if (pObject) {
TString bname=fBranch;
if (bname.IsNull()) {
bname=pObject->GetName();
if (bname.CompareTo(pObject->ClassName())==0) {
ALIHLTERRORGUARD(5, "no branch name specified for unnamed object %s, not added to ESD", bname.Data());
bname="";
}
}
if (!bname.IsNull()) {
iResult=fManager->AddObject(fESD, pObject, bname.Data());
} else {
iResult=-EBADF;
}
pData->ReleaseDataObject(pObject);
pObject=NULL;
} else {
AliHLTComponentDataType dt=kAliHLTVoidDataType;
AliHLTUInt32_t spec=kAliHLTVoidDataSpec;
pData->GetDataBlockDescription(dt, spec);
HLTError("Can not get TObject from HLTOUT buffer for block %s 0x%x", AliHLTComponent::DataType2Text(dt).c_str(), spec);
iResult=-ENODATA;
}
if (pData->SelectNextDataBlock()>=0) {
ALIHLTERRORGUARD(5, "the default function can only handle one single data block/object");
}
return iResult;
}
int AliHLTOUTHandlerEsdBranch::GetProcessedData(const AliHLTUInt8_t* &pData)
{
if (!fpData) {
pData=NULL;
return 0;
}
pData=reinterpret_cast<AliHLTUInt8_t*>(fpData->GetArray());
return fSize;
}
int AliHLTOUTHandlerEsdBranch::ReleaseProcessedData(const AliHLTUInt8_t* pData, int size)
{
int iResult=0;
if (!fpData || size != fSize ||
const_cast<AliHLTUInt8_t*>(pData) != reinterpret_cast<AliHLTUInt8_t*>(fpData->GetArray())) {
HLTError("attempt to release to wrong data buffer %p size %d, expected %p size %d", pData, size, fpData?fpData->GetArray():NULL, fSize);
}
fSize=0;
return iResult;
}
AliHLTOUTHandlerEsdBranch.cxx:1 AliHLTOUTHandlerEsdBranch.cxx:2 AliHLTOUTHandlerEsdBranch.cxx:3 AliHLTOUTHandlerEsdBranch.cxx:4 AliHLTOUTHandlerEsdBranch.cxx:5 AliHLTOUTHandlerEsdBranch.cxx:6 AliHLTOUTHandlerEsdBranch.cxx:7 AliHLTOUTHandlerEsdBranch.cxx:8 AliHLTOUTHandlerEsdBranch.cxx:9 AliHLTOUTHandlerEsdBranch.cxx:10 AliHLTOUTHandlerEsdBranch.cxx:11 AliHLTOUTHandlerEsdBranch.cxx:12 AliHLTOUTHandlerEsdBranch.cxx:13 AliHLTOUTHandlerEsdBranch.cxx:14 AliHLTOUTHandlerEsdBranch.cxx:15 AliHLTOUTHandlerEsdBranch.cxx:16 AliHLTOUTHandlerEsdBranch.cxx:17 AliHLTOUTHandlerEsdBranch.cxx:18 AliHLTOUTHandlerEsdBranch.cxx:19 AliHLTOUTHandlerEsdBranch.cxx:20 AliHLTOUTHandlerEsdBranch.cxx:21 AliHLTOUTHandlerEsdBranch.cxx:22 AliHLTOUTHandlerEsdBranch.cxx:23 AliHLTOUTHandlerEsdBranch.cxx:24 AliHLTOUTHandlerEsdBranch.cxx:25 AliHLTOUTHandlerEsdBranch.cxx:26 AliHLTOUTHandlerEsdBranch.cxx:27 AliHLTOUTHandlerEsdBranch.cxx:28 AliHLTOUTHandlerEsdBranch.cxx:29 AliHLTOUTHandlerEsdBranch.cxx:30 AliHLTOUTHandlerEsdBranch.cxx:31 AliHLTOUTHandlerEsdBranch.cxx:32 AliHLTOUTHandlerEsdBranch.cxx:33 AliHLTOUTHandlerEsdBranch.cxx:34 AliHLTOUTHandlerEsdBranch.cxx:35 AliHLTOUTHandlerEsdBranch.cxx:36 AliHLTOUTHandlerEsdBranch.cxx:37 AliHLTOUTHandlerEsdBranch.cxx:38 AliHLTOUTHandlerEsdBranch.cxx:39 AliHLTOUTHandlerEsdBranch.cxx:40 AliHLTOUTHandlerEsdBranch.cxx:41 AliHLTOUTHandlerEsdBranch.cxx:42 AliHLTOUTHandlerEsdBranch.cxx:43 AliHLTOUTHandlerEsdBranch.cxx:44 AliHLTOUTHandlerEsdBranch.cxx:45 AliHLTOUTHandlerEsdBranch.cxx:46 AliHLTOUTHandlerEsdBranch.cxx:47 AliHLTOUTHandlerEsdBranch.cxx:48 AliHLTOUTHandlerEsdBranch.cxx:49 AliHLTOUTHandlerEsdBranch.cxx:50 AliHLTOUTHandlerEsdBranch.cxx:51 AliHLTOUTHandlerEsdBranch.cxx:52 AliHLTOUTHandlerEsdBranch.cxx:53 AliHLTOUTHandlerEsdBranch.cxx:54 AliHLTOUTHandlerEsdBranch.cxx:55 AliHLTOUTHandlerEsdBranch.cxx:56 AliHLTOUTHandlerEsdBranch.cxx:57 AliHLTOUTHandlerEsdBranch.cxx:58 AliHLTOUTHandlerEsdBranch.cxx:59 AliHLTOUTHandlerEsdBranch.cxx:60 AliHLTOUTHandlerEsdBranch.cxx:61 AliHLTOUTHandlerEsdBranch.cxx:62 AliHLTOUTHandlerEsdBranch.cxx:63 AliHLTOUTHandlerEsdBranch.cxx:64 AliHLTOUTHandlerEsdBranch.cxx:65 AliHLTOUTHandlerEsdBranch.cxx:66 AliHLTOUTHandlerEsdBranch.cxx:67 AliHLTOUTHandlerEsdBranch.cxx:68 AliHLTOUTHandlerEsdBranch.cxx:69 AliHLTOUTHandlerEsdBranch.cxx:70 AliHLTOUTHandlerEsdBranch.cxx:71 AliHLTOUTHandlerEsdBranch.cxx:72 AliHLTOUTHandlerEsdBranch.cxx:73 AliHLTOUTHandlerEsdBranch.cxx:74 AliHLTOUTHandlerEsdBranch.cxx:75 AliHLTOUTHandlerEsdBranch.cxx:76 AliHLTOUTHandlerEsdBranch.cxx:77 AliHLTOUTHandlerEsdBranch.cxx:78 AliHLTOUTHandlerEsdBranch.cxx:79 AliHLTOUTHandlerEsdBranch.cxx:80 AliHLTOUTHandlerEsdBranch.cxx:81 AliHLTOUTHandlerEsdBranch.cxx:82 AliHLTOUTHandlerEsdBranch.cxx:83 AliHLTOUTHandlerEsdBranch.cxx:84 AliHLTOUTHandlerEsdBranch.cxx:85 AliHLTOUTHandlerEsdBranch.cxx:86 AliHLTOUTHandlerEsdBranch.cxx:87 AliHLTOUTHandlerEsdBranch.cxx:88 AliHLTOUTHandlerEsdBranch.cxx:89 AliHLTOUTHandlerEsdBranch.cxx:90 AliHLTOUTHandlerEsdBranch.cxx:91 AliHLTOUTHandlerEsdBranch.cxx:92 AliHLTOUTHandlerEsdBranch.cxx:93 AliHLTOUTHandlerEsdBranch.cxx:94 AliHLTOUTHandlerEsdBranch.cxx:95 AliHLTOUTHandlerEsdBranch.cxx:96 AliHLTOUTHandlerEsdBranch.cxx:97 AliHLTOUTHandlerEsdBranch.cxx:98 AliHLTOUTHandlerEsdBranch.cxx:99 AliHLTOUTHandlerEsdBranch.cxx:100 AliHLTOUTHandlerEsdBranch.cxx:101 AliHLTOUTHandlerEsdBranch.cxx:102 AliHLTOUTHandlerEsdBranch.cxx:103 AliHLTOUTHandlerEsdBranch.cxx:104 AliHLTOUTHandlerEsdBranch.cxx:105 AliHLTOUTHandlerEsdBranch.cxx:106 AliHLTOUTHandlerEsdBranch.cxx:107 AliHLTOUTHandlerEsdBranch.cxx:108 AliHLTOUTHandlerEsdBranch.cxx:109 AliHLTOUTHandlerEsdBranch.cxx:110 AliHLTOUTHandlerEsdBranch.cxx:111 AliHLTOUTHandlerEsdBranch.cxx:112 AliHLTOUTHandlerEsdBranch.cxx:113 AliHLTOUTHandlerEsdBranch.cxx:114 AliHLTOUTHandlerEsdBranch.cxx:115 AliHLTOUTHandlerEsdBranch.cxx:116 AliHLTOUTHandlerEsdBranch.cxx:117 AliHLTOUTHandlerEsdBranch.cxx:118 AliHLTOUTHandlerEsdBranch.cxx:119 AliHLTOUTHandlerEsdBranch.cxx:120 AliHLTOUTHandlerEsdBranch.cxx:121 AliHLTOUTHandlerEsdBranch.cxx:122 AliHLTOUTHandlerEsdBranch.cxx:123 AliHLTOUTHandlerEsdBranch.cxx:124 AliHLTOUTHandlerEsdBranch.cxx:125 AliHLTOUTHandlerEsdBranch.cxx:126 AliHLTOUTHandlerEsdBranch.cxx:127 AliHLTOUTHandlerEsdBranch.cxx:128 AliHLTOUTHandlerEsdBranch.cxx:129 AliHLTOUTHandlerEsdBranch.cxx:130 AliHLTOUTHandlerEsdBranch.cxx:131 AliHLTOUTHandlerEsdBranch.cxx:132 AliHLTOUTHandlerEsdBranch.cxx:133 AliHLTOUTHandlerEsdBranch.cxx:134 AliHLTOUTHandlerEsdBranch.cxx:135 AliHLTOUTHandlerEsdBranch.cxx:136 AliHLTOUTHandlerEsdBranch.cxx:137 AliHLTOUTHandlerEsdBranch.cxx:138 AliHLTOUTHandlerEsdBranch.cxx:139 AliHLTOUTHandlerEsdBranch.cxx:140 AliHLTOUTHandlerEsdBranch.cxx:141 AliHLTOUTHandlerEsdBranch.cxx:142 AliHLTOUTHandlerEsdBranch.cxx:143 AliHLTOUTHandlerEsdBranch.cxx:144 AliHLTOUTHandlerEsdBranch.cxx:145 AliHLTOUTHandlerEsdBranch.cxx:146 AliHLTOUTHandlerEsdBranch.cxx:147 AliHLTOUTHandlerEsdBranch.cxx:148 AliHLTOUTHandlerEsdBranch.cxx:149 AliHLTOUTHandlerEsdBranch.cxx:150 AliHLTOUTHandlerEsdBranch.cxx:151 AliHLTOUTHandlerEsdBranch.cxx:152 AliHLTOUTHandlerEsdBranch.cxx:153 AliHLTOUTHandlerEsdBranch.cxx:154 AliHLTOUTHandlerEsdBranch.cxx:155 AliHLTOUTHandlerEsdBranch.cxx:156 AliHLTOUTHandlerEsdBranch.cxx:157 AliHLTOUTHandlerEsdBranch.cxx:158 AliHLTOUTHandlerEsdBranch.cxx:159 AliHLTOUTHandlerEsdBranch.cxx:160 AliHLTOUTHandlerEsdBranch.cxx:161 AliHLTOUTHandlerEsdBranch.cxx:162 AliHLTOUTHandlerEsdBranch.cxx:163 AliHLTOUTHandlerEsdBranch.cxx:164 AliHLTOUTHandlerEsdBranch.cxx:165 AliHLTOUTHandlerEsdBranch.cxx:166 AliHLTOUTHandlerEsdBranch.cxx:167 AliHLTOUTHandlerEsdBranch.cxx:168 AliHLTOUTHandlerEsdBranch.cxx:169 AliHLTOUTHandlerEsdBranch.cxx:170 AliHLTOUTHandlerEsdBranch.cxx:171 AliHLTOUTHandlerEsdBranch.cxx:172 AliHLTOUTHandlerEsdBranch.cxx:173 AliHLTOUTHandlerEsdBranch.cxx:174 AliHLTOUTHandlerEsdBranch.cxx:175 AliHLTOUTHandlerEsdBranch.cxx:176 AliHLTOUTHandlerEsdBranch.cxx:177 AliHLTOUTHandlerEsdBranch.cxx:178 AliHLTOUTHandlerEsdBranch.cxx:179 AliHLTOUTHandlerEsdBranch.cxx:180 AliHLTOUTHandlerEsdBranch.cxx:181 AliHLTOUTHandlerEsdBranch.cxx:182 AliHLTOUTHandlerEsdBranch.cxx:183 AliHLTOUTHandlerEsdBranch.cxx:184 AliHLTOUTHandlerEsdBranch.cxx:185 AliHLTOUTHandlerEsdBranch.cxx:186 AliHLTOUTHandlerEsdBranch.cxx:187 AliHLTOUTHandlerEsdBranch.cxx:188 AliHLTOUTHandlerEsdBranch.cxx:189