3 /**************************************************************************
4 * This file is property of and copyright by the ALICE HLT Project *
5 * ALICE Experiment at CERN, All rights reserved. *
7 * Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no> *
8 * for The ALICE HLT Project. *
10 * Permission to use, copy, modify and distribute this software and its *
11 * documentation strictly for non-commercial purposes is hereby granted *
12 * without fee, provided that the above copyright notice appears in all *
13 * copies and that both the copyright notice and this permission notice *
14 * appear in the supporting documentation. The authors make no claims *
15 * about the suitability of this software for any purpose. It is *
16 * provided "as is" without express or implied warranty. *
17 **************************************************************************/
19 /** @file AliHLTAgentUtil.cxx
20 @author Matthias Richter
22 @brief Agent of the libAliHLTUtil library
26 #include "AliHLTAgentUtil.h"
27 #include "AliHLTConfiguration.h"
28 #include "AliHLTOUTHandlerChain.h"
30 // header files of library components
31 #include "AliHLTDataGenerator.h"
32 #include "AliHLTRawReaderPublisherComponent.h"
33 #include "AliHLTLoaderPublisherComponent.h"
34 #include "AliHLTRootFileStreamerComponent.h"
35 #include "AliHLTRootFileWriterComponent.h"
36 #include "AliHLTRootFilePublisherComponent.h"
37 //#include "AliHLTMCGeneratorComponent.h"
38 #include "AliHLTESDMCEventPublisherComponent.h"
39 #include "AliHLTFileWriter.h"
40 #include "AliHLTFilePublisher.h"
41 #include "AliHLTBlockFilterComponent.h"
42 #include "AliHLTEsdCollectorComponent.h"
43 #include "AliHLTOUTPublisherComponent.h"
44 #include "AliHLTCompStatCollector.h"
46 /** global instance for agent registration */
47 AliHLTAgentUtil gAliHLTAgentUtil;
49 /** ROOT macro for the implementation of ROOT specific class methods */
50 ClassImp(AliHLTAgentUtil)
52 AliHLTAgentUtil::AliHLTAgentUtil()
54 AliHLTModuleAgent("Util"),
55 fCompStatDataHandler(NULL)
57 // see header file for class documentation
59 // refer to README to build package
61 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
64 AliHLTAgentUtil::~AliHLTAgentUtil()
66 // see header file for class documentation
69 int AliHLTAgentUtil::CreateConfigurations(AliHLTConfigurationHandler* handler,
70 AliRawReader* /*rawReader*/,
71 AliRunLoader* /*runloader*/) const
73 // see header file for class documentation
74 if (!handler) return 0;
76 /////////////////////////////////////////////////////////////////////////////////////
78 // a kChain HLTOUT configuration for processing of {'COMPSTAT':'PRIV'} data blocks
79 // produces a TTree object of the component statistics and writes it to disc
81 // publisher component
82 handler->CreateConfiguration("UTIL-hltout-compstat-publisher", "AliHLTOUTPublisher" , NULL, "");
84 // collector configuration
85 handler->CreateConfiguration("UTIL-compstat-converter", "StatisticsCollector", "UTIL-hltout-compstat-publisher", "");
87 // writer configuration
88 handler->CreateConfiguration("UTIL-compstat-writer", "ROOTFileWriter", "UTIL-compstat-converter", "-datafile HLT.statistics.root -concatenate-events -overwrite");
93 const char* AliHLTAgentUtil::GetReconstructionChains(AliRawReader* /*rawReader*/,
94 AliRunLoader* /*runloader*/) const
96 // see header file for class documentation
100 const char* AliHLTAgentUtil::GetRequiredComponentLibraries() const
102 // see header file for class documentation
106 int AliHLTAgentUtil::RegisterComponents(AliHLTComponentHandler* pHandler) const
108 // see header file for class documentation
110 if (!pHandler) return -EINVAL;
111 pHandler->AddComponent(new AliHLTDataGenerator);
112 pHandler->AddComponent(new AliHLTRawReaderPublisherComponent);
113 pHandler->AddComponent(new AliHLTLoaderPublisherComponent);
114 pHandler->AddComponent(new AliHLTRootFileStreamerComponent);
115 pHandler->AddComponent(new AliHLTRootFileWriterComponent);
116 pHandler->AddComponent(new AliHLTRootFilePublisherComponent);
117 // pHandler->AddComponent(new AliHLTMCGeneratorComponent);
118 pHandler->AddComponent(new AliHLTESDMCEventPublisherComponent);
119 pHandler->AddComponent(new AliHLTFileWriter);
120 pHandler->AddComponent(new AliHLTFilePublisher);
121 pHandler->AddComponent(new AliHLTBlockFilterComponent);
122 pHandler->AddComponent(new AliHLTEsdCollectorComponent);
123 pHandler->AddComponent(new AliHLTOUTPublisherComponent);
124 pHandler->AddComponent(new AliHLTCompStatCollector);
128 int AliHLTAgentUtil::GetHandlerDescription(AliHLTComponentDataType dt,
129 AliHLTUInt32_t /*spec*/,
130 AliHLTOUTHandlerDesc& desc) const
132 // see header file for class documentation
134 // handler for the component statistics data blocks {'COMPSTAT':'PRIV'}
135 if (dt==kAliHLTDataTypeComponentStatistics ||
136 dt==kAliHLTDataTypeComponentTable) {
137 desc=AliHLTOUTHandlerDesc(kChain, dt, GetModuleId());
144 AliHLTOUTHandler* AliHLTAgentUtil::GetOutputHandler(AliHLTComponentDataType dt,
145 AliHLTUInt32_t /*spec*/)
147 // see header file for class documentation
149 // handler for the component statistics data blocks {'COMPSTAT':'PRIV'}
150 if (dt==kAliHLTDataTypeComponentStatistics ||
151 dt==kAliHLTDataTypeComponentTable) {
152 if (fCompStatDataHandler==NULL)
153 fCompStatDataHandler=new AliHLTOUTHandlerChain("chains=UTIL-compstat-writer");
154 return fCompStatDataHandler;
160 int AliHLTAgentUtil::DeleteOutputHandler(AliHLTOUTHandler* pInstance)
162 // see header file for class documentation
163 if (pInstance==NULL) return -EINVAL;
165 if (pInstance==fCompStatDataHandler) {
166 delete fCompStatDataHandler;
167 fCompStatDataHandler=NULL;