#include <cassert>
#include "AliHLTAgentSample.h"
-#include "AliHLTConfiguration.h"
#include "TSystem.h"
// header files of library components
#include "AliHLTDummyComponent.h"
+#include "AliHLTSampleComponent1.h"
+#include "AliHLTSampleComponent2.h"
+#include "AliHLTSampleMonitoringComponent.h"
// header file of the module preprocessor
#include "AliHLTSamplePreprocessor.h"
+// raw data handler of HLTOUT data
+#include "AliHLTOUTHandlerEquId.h"
+#include "AliHLTOUTHandlerEsdBranch.h"
+
/** global instance for agent registration */
AliHLTAgentSample gAliHLTAgentSample;
ClassImp(AliHLTAgentSample)
AliHLTAgentSample::AliHLTAgentSample()
+ :
+ AliHLTModuleAgent("Sample")
{
// see header file for class documentation
// or
int AliHLTAgentSample::CreateConfigurations(AliHLTConfigurationHandler* handler,
AliRawReader* /*rawReader*/,
- AliRunLoader* /*runloader*/) const
+ AliRunLoader* runloader) const
{
// see header file for class documentation
arg="-datafile "; arg+=fgkAliHLTAgentSampleOut;
handler->CreateConfiguration("sample-sink1", "FileWriter" , "sample-cp" , arg.Data());
+ // specific example for the AliRoot simulation (run loader present)
+ if (runloader) {
// sample offline source
handler->CreateConfiguration("sample-offsrc", "AliLoaderPublisher" , NULL , "-loader TPCLoader -tree digits -verbose");
// sample offline sink
handler->CreateConfiguration("sample-offsnk", "SampleOfflineDataSink" , "sample-offsrc" , NULL);
+ }
}
return 0;
}
const char* AliHLTAgentSample::GetReconstructionChains(AliRawReader* /*rawReader*/,
- AliRunLoader* /*runloader*/) const
+ AliRunLoader* runloader) const
{
// see header file for class documentation
- return "sample-sink1 sample-offsnk";
+ if (runloader) return "sample-sink1 sample-offsnk";
+
+ return "sample-sink1";
}
const char* AliHLTAgentSample::GetRequiredComponentLibraries() const
assert(pHandler);
if (!pHandler) return -EINVAL;
pHandler->AddComponent(new AliHLTDummyComponent);
+ pHandler->AddComponent(new AliHLTSampleComponent1);
+ pHandler->AddComponent(new AliHLTSampleComponent2);
+ pHandler->AddComponent(new AliHLTSampleMonitoringComponent);
+
return 0;
}
// see header file for class documentation
return new AliHLTSamplePreprocessor;
}
+
+int AliHLTAgentSample::GetHandlerDescription(AliHLTComponentDataType dt,
+ AliHLTUInt32_t spec,
+ AliHLTOUTHandlerDesc& desc) const
+{
+ // see header file for class documentation
+ if (dt==(kAliHLTDataTypeDDLRaw|kAliHLTDataOriginSample)) {
+ desc=AliHLTOUTHandlerDesc(kRawReader, dt, GetModuleId());
+ HLTInfo("module %s handles data block type %s specification %d (0x%x)",
+ GetModuleId(), AliHLTComponent::DataType2Text(dt).c_str(), spec, spec);
+ return 1;
+ }
+
+ // add TObject data blocks of type {ROOTTOBJ:SMPL} to ESD
+ if (dt==(kAliHLTDataTypeTObject|kAliHLTDataOriginSample)) {
+ desc=AliHLTOUTHandlerDesc(kEsd, dt, GetModuleId());
+ HLTInfo("module %s handles data block type %s specification %d (0x%x)",
+ GetModuleId(), AliHLTComponent::DataType2Text(dt).c_str(), spec, spec);
+ return 1;
+ }
+
+ return 0;
+}
+
+AliHLTOUTHandler* AliHLTAgentSample::GetOutputHandler(AliHLTComponentDataType dt,
+ AliHLTUInt32_t /*spec*/)
+{
+ // see header file for class documentation
+ if (dt==(kAliHLTDataTypeDDLRaw|kAliHLTDataOriginSample)) {
+ // use the default handler
+ static AliHLTOUTHandlerEquId handler;
+ return &handler;
+ }
+
+ if (dt==(kAliHLTDataTypeTObject|kAliHLTDataOriginSample)) {
+ // use AliHLTOUTHandlerEsdBranch handler to add the TObject
+ // to the ESD branch
+ // Note: the object should have an appropriate name returned
+ // by GetName(). Use SetName() to prepare the object before streaming
+ static AliHLTOUTHandlerEsdBranch handler;
+ return &handler;
+ }
+
+ return NULL;
+}
+
+int AliHLTAgentSample::DeleteOutputHandler(AliHLTOUTHandler* pInstance)
+{
+ // see header file for class documentation
+ if (pInstance==NULL) return -EINVAL;
+
+ // nothing to delete, the handler have been defined static
+ return 0;
+}